实体框架延迟加载

时间:2011-01-10 14:39:27

标签: entity-framework entity

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

问题是在我返回结果后,连接被关闭,因为它已关闭,当我试图访问任何子元素时它会崩溃。发生这种情况是因为延迟加载设置为True(默认值)它永远不会在使用之前加载子关系,并且在关闭连接后我开始使用它们。那么解决这个问题的最佳方法是怎样的呢?

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

2 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:3)

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

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

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