c# - 包括实体的所有相关数据
问题描述
我目前正在使用带有 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;
}
这已经好多了,但它仍然执行多个查询。
如果这是不可能的,是否可以使用Include
和ThenInclude
方法来实现,只用一个查询来加载所有相关数据?
解决方案
所以实际上,这个问题已经被问了好几次了,不知何故我没有注意到。因此,我将在此处链接正确答案。
您可以通过在实例的属性LazyLoadingEnabled
上设置属性来启用和禁用它。ChangeTracker
DBContext
推荐阅读
- html - 内容出现在引导页脚上
- javascript - 根据Javascript中列值的总和在javascript中重新创建数组
- powerbi - Power BI with SQL Analysis Services:如何从“字段”中“隐藏”所有未使用的表
- android - 导航抽屉内的底部导航栏
- javascript - 我如何计算更改时的输入值,并且它应该显示默认值结果?
- algorithm - 微小的 URL 系统设计
- firebase - 版本解决失败
- mysql - 如何读取 SAS 数据集(托管在 S3 上)并将其转换为 AWS RDS?
- cypress - 在 cypress 中,我们如何访问夹具文件中的多个用户?
- powershell - 如何在未执行的管道中跟踪安装程序脚本?