Entity Framework延迟加载

8
using(DataContext db = new DataContext ())
{
    var result = db.SomeTable.ToList();
    return result;
}

问题是在我返回结果后,连接被关闭了,因为连接已经关闭了,当我尝试访问任何子元素时,它就会崩溃。这是因为默认情况下懒加载设置为True,它在使用子关系之前从不加载它们,而我在连接关闭后开始使用它们。那么最好的解决方法是什么?
我尝试关闭懒加载,但它没有加载任何子关系表。
2个回答

14

您始终可以显式加载子集合:

var result = db.SomeTable.Include("SomeChildCollectionName")
                         .Include("AnotherChildCollectionName")
                         .ToList();

好的,但是如果我想加载所有子元素而不必显式地编写include(“ElementName”),该怎么办?有很多子元素,这就是为什么。 - syncis
@user554978 - 这不被支持。你必须使用Include显式地加载所有的子项,或者保持连接打开并允许懒加载执行它的操作。 - Justin Niessner

3
您可以使用 .include() 方法。
var result = db.SomeTable.Include("ChildEntitySet").ToList();

在返回之前,您还可以添加result.ChildEntitySet.Load()调用。这种方法不太高效,因为它将导致两次对服务器的访问。使用.Include()方法将生成带有JOIN的SQL语句,只需要一次对服务器的访问。


1
好的,但如果我想加载所有子元素而不必显式地编写include(“ElementName”)怎么办?有很多子元素,这就是为什么。 - syncis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接