为什么要预先加载实体?

Why are the entities being eager-loaded?

我有一个包含多个层的实体层次结构,其中一层包含数以万计的对象。有时我只想要顶级对象,但我发现 Entity Framework 正在加载层次结构中的 everything

我什至尝试过显式延迟加载,但无济于事。

using (var db = new MyEntities())
{
    db.Configuration.ProxyCreationEnabled = true;
    db.Configuration.LazyLoadingEnabled = true;

    var daoDict = (from d in db.stt_dictionary
                   where d.id == dictionaryID && !d.deleted
                   select d).FirstOrDefault();
}

调试时,如果我单步执行此操作然后将鼠标悬停在 daoDict 上,我发现它的集合属性(virtual)包含数千个对象。

为什么?

使用调试器获取它们将加载它们。调试器没有做任何与常规代码不同的事情。它正在调用 属性 的 getter,并执行此操作来获取数据。

记录实际执行的数据库查询(通过上下文或通过数据库),以查看以实际上不会改变的方式提取的数据正在执行哪些查询。