表格:Article
,Author
,Comment
(1篇文章和1位作者可以有*评论)
在数据库中有1篇文章,1位作者和1位评论。
问题是,那段代码
myBD my_bd = new myBD();
var articles = by_bd.Article;
正常,我可以看到Author
和Article
有1条评论。
但那段代码
var comm = (from u in my_bd.Comment
where ......
select u);
返回注释,但在属性Article
和Author
中有NULL值。为什么?
答案 0 :(得分:3)
实体框架不支持延迟加载(尚未),默认情况下是悲观的。为了将链接对象作为集合获取,您必须明确地将它们包含在查询中。
var comm = from u in my_bd.Comment.Include("Article").Include("Author")
where ......
select u;
通过这样做,您明确告诉EF在创建查询时执行连接。现在您应该能够选择这些属性了。
答案 1 :(得分:0)
在初始查询中使用.Include的替代方法,您可以使用.Load()方法使用显式加载,例如: myCustomer.OrdersReference.Load()
执行的SQL查询数量和传输的数据量明显存在差异。
在这里解释一下:http://www.robbagby.com/entity-framework/is-lazy-loading-in-ef-4-evil-or-the-second-coming/