LazyLoadingEnabled false无法正常工作

时间:2018-06-07 13:23:51

标签: c# lazy-loading dbcontext

我很困惑,我需要帮助理解延迟加载。我认为配置延迟加载false会加载整个对象,包括子元素,但这不会发生在我身上。搜索其他问题,我找不到合适的答案。

服务器包含一个主管列表,每个主管都包含一个中继列表。

using (var db = new ProjectDatabase())
{
        db.Configuration.LazyLoadingEnabled = false;

        var dbServer = db.Servers.Include("Supervisors.Trunks").Single(s => s.Name == ArchiveName);

        Console.WriteLine(dbServer.Supervisors.SelectMany(s=>s.Trunks).Count());
}

上面的代码将3写入控制台行,这是预期的,因为服务器包含3个主管,每个主管包含1个主干。

using (var db = new ProjectDatabase())
{
        db.Configuration.LazyLoadingEnabled = false;

        var dbServer = db.Servers.Single(s => s.Name == ArchiveName);

        Console.WriteLine(dbServer.Supervisors.SelectMany(s=>s.Trunks).Count());
}

此代码(与first相同但没有include语句)将0写入控制台。我以为LazyLoadingEnabled = false会自动加载所有的主管和中继。我需要几十种不同类型的子对象,所以我希望有一个优雅的解决方案,不需要大量的include语句。请帮忙。

1 个答案:

答案 0 :(得分:0)

你好像混淆了什么。

@NotNull Integer

禁用所有延迟加载。你需要的是

LazyLoadingEnabled = false;

它告诉EF加载所有必需的导航属性(在你调用它们的那一刻),并且之前没有使用过。