包括实体的所有相关数据

Include all related data of an entity

我目前正在使用带有 ef-Core 的惰性代理。对于我的大部分查询,我真的很喜欢并且需要延迟加载,但我有一个特定的查询,它对其他实体有很多依赖性。

看起来像这样:

- Model
    - ICollection<Model2>
        - ICollection<Model3>
            - Model4
                - Model5
                - Model6

对于此查询,一次加载所有内容会更好,性能提高了大约 200%。

我现在的问题是,有什么方法可以直接加载所有相关数据吗?

我现在正在做的事情是这样的:

var entity1 = await DbContext.Entites1.FirstOrDefaultAsync(x => x.Id == 1);

var entities2 = await DbContext.Entry(entity1).Collection(x => x.Entites2).Query().ToListAsync();
foreach (var entity2 in entities2)
{
    var entities3 = await DbContext.Entry(entity2).Collection(x => x.Entites3).Query().Include(x => x.Entity4).ThenInclude(x => x.Entity5).Include(x => x.Entity4).ThenInclude(x => x.Entity6).ToListAsync();

    item.LessonEntries = entities3;
}

这已经好多了,但它仍然会执行多个查询。

如果这不可能,是否可以通过 IncludeThenInclude 方法仅通过一次查询加载所有相关数据来实现?

所以实际上,这个问题已经被问过好几次了,但不知何故我没有注意到。因此,我会 link 正确答案

您可以通过在 DBContext 实例的 ChangeTracker 属性 上设置 LazyLoadingEnabled 属性 来启用和禁用它。