首页 > 解决方案 > 包括实体的所有相关数据

问题描述

我目前正在使用带有 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方法来实现,只用一个查询来加载所有相关数据?

标签: c#performanceentity-framework-corelazy-loading

解决方案


所以实际上,这个问题已经被问了好几次了,不知何故我没有注意到。因此,我将在此处链接正确答案。

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


推荐阅读