【问题标题】:Entity Framework lazy loading实体框架延迟加载
【发布时间】:2011-11-03 10:44:34
【问题描述】:
using(DataContext db = new DataContext ())
{
    var result = db.SomeTable.ToList();
    return result;
}

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

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

【问题讨论】:

    标签: entity-framework entity


    【解决方案1】:

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

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

    【讨论】:

    • 好的,但是如果我想加载所有子元素而不必显式编写 include("ElementName") 怎么办?有很多子元素,这就是为什么
    • @user554978 - 不支持。您必须使用 Include 显式加载所有子项,或保持连接打开并允许延迟加载执行其操作。
    【解决方案2】:

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

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

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

    【讨论】:

    • 好的,但是如果我想加载所有子元素而不必显式编写 include("ElementName") 怎么办?有很多子元素,这就是为什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多