我很困惑,我需要帮助理解延迟加载。我认为配置延迟加载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语句。请帮忙。
答案 0 :(得分:0)
你好像混淆了什么。
@NotNull Integer
禁用所有延迟加载。你需要的是
LazyLoadingEnabled = false;
它告诉EF加载所有必需的导航属性(在你调用它们的那一刻),并且之前没有使用过。