2011-01-10 178 views
8
using(DataContext db = new DataContext()) 
{ 
    var result = db.SomeTable.ToList(); 
    return result; 
} 

问题是我已经返回结果后,连接关闭,因为它关闭,它崩溃时,我试图访问任何子元素。发生这种情况是因为延迟加载设置为True(默认),它在使用之前从不加载子关系,并且在连接关闭后开始使用它们。那么解决这个问题的最好方法是什么?实体框架懒加载

我试图关闭延迟加载,但它没有加载任何的子关系表。

回答

14

你总是可以显式地加载你的孩子集合:

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

好了,但如果我想加载所有子元素,而不必明确写有(“的ElementName”)是什么?有很多子元素,那就是为什么 – syncis 2011-01-10 14:49:31

3

您可以使用.include()方法。

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

您还可以在返回之前添加result.ChildEntitySet.Load()呼叫。这效率不高,因为它会导致两次到达服务器。使用.Include()方法将生成一个带有JOIN的SQL语句,只允许一次访问服务器。

+1

好了,但如果我想加载所有子元素,而不必明确写有(“的ElementName”)是什么?有很多子元素,这就是为什么 – syncis 2011-01-10 14:49:11