entity framework表关系问题

lkj7b226 2010-03-19 10:34:45
var userInfo = (from u in context.Users
where u.Name == userName &&u.Password==passWord
select u).FirstOrDefault();

if (userInfo != null)
{
userInfo.tbRole = (from u in context.Users
where u.Name == userName
&& u.Password == passWord
select u.tbRole).FirstOrDefault();
}


return userInfo;

表tbUser和tbRole已经建立了多对一关系,tbUser的导航属性是tbRole
如果我只执行 var userInfo = (from u in context.Users
where u.Name == userName &&u.Password==passWord
select u).FirstOrDefault();
查询出来的tbUser中的tbRole确是空值............我必须还这样做:


if (userInfo != null)
{
userInfo.tbRole = (from u in context.Users
where u.Name == userName
&& u.Password == passWord
select u.tbRole).FirstOrDefault();

这样tbUser.tbRole才有值,这样做是不是很搞笑,不知道什么原因,难道关系建错了吗?
...全文
303 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lkj7b226 2010-03-24
  • 打赏
  • 举报
回复
这个问题解决了
websco 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jv9 的回复:]
也感谢你分享你的经验~:)
[/Quote]
冷大大,我在好几个贴子里都提到了延迟加载,这个我看了开头也觉得是~~
websco 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lkj7b226 的回复:]
在3.5里面还没延迟加载,那是叫懒惰加载,使用前必须要先加载,但是在4.0里是叫懒惰加载,使用到的时候会自动加载.....
[/Quote]

你是同一个问题发了两个贴? 你的问题到底解决了没有。如果是到了VS2010就自动解决了,那就是VS2008 SP1 的EDM设计器的问题,Bug很多。

是应叫懒惰加载,不过我是从Linq to SQL转到EDM的,叫习惯了,是同一个意思。
lkj7b226 2010-03-23
  • 打赏
  • 举报
回复
郁闷,现在遇到一些问题在4.0里都可迎刃而解,赶紧出个2010正式版吧!
lkj7b226 2010-03-23
  • 打赏
  • 举报
回复
在3.5里面还没延迟加载,那是叫懒惰加载,使用前必须要先加载,但是在4.0里是叫懒惰加载,使用到的时候会自动加载.....
jv9 2010-03-22
  • 打赏
  • 举报
回复

也感谢你分享你的经验~:)
lkj7b226 2010-03-22
  • 打赏
  • 举报
回复
再次感谢版主的支持!
lkj7b226 2010-03-22
  • 打赏
  • 举报
回复
找到问题的根源了,在Entity Framework中进行一对多的查询,Entity Framework默认是Lazy Load,即关联数据在需要的时候才加载。
所以我在使用tbRole前必须先执行userInfo.tbRoleReference.Load();
lkj7b226 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jv9 的回复:]
按照我理解的,是不是你必须执行两次查询u.tbRole才能获取到tbRole数据呢?

如果是这样,那你第一次查询userInfo 是Null么?确认执行
userInfo.tbRole = (from u in context.Users
where u.Name == userName
&& u.Password == passWord
select u.tbRol……
[/Quote]


是啊,按理不是一次查询出userInfo,再通过userInfo.tbRole就可以取到tbRole的值了吗?如果还要执行一次对tbRole的查询是不是有点重复性!
jv9 2010-03-20
  • 打赏
  • 举报
回复
按照我理解的,是不是你必须执行两次查询u.tbRole才能获取到tbRole数据呢?

如果是这样,那你第一次查询userInfo 是Null么?确认执行
userInfo.tbRole = (from u in context.Users
where u.Name == userName
&& u.Password == passWord
select u.tbRole).FirstOrDefault();
了么?

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧