【发布时间】:2020-12-01 10:16:34
【问题描述】:
我的代码中有很多 EF 显式调用,它们会在之后加载数据以避免 EF 笛卡尔积(因为它会减慢我的查询速度)
var users = await dbContext.User.ToListAsync();
foreach (var user in users )
{
await dbContext.Entry(user).Reference(b => b.VirtualProperty1).LoadAsync();
await dbContext.Entry(user).Reference(b => b.VirtualProperty2).LoadAsync();
await dbContext.Entry(user).Collection(b => b.VirtualCollection).LoadAsync();
}
问题是,我可以放弃await 并做await Task.WhenAll(AllAboveEagerLoadTasks) 吗?
【问题讨论】:
-
您认为急切加载 (
Include) 与笛卡尔积相同的假设是不正确的。如果Include很慢,您可以尝试在 EF 5 中使用 split queries。 -
我知道,但不幸的是,我正在使用尚未为 EF5 做好准备的 Azure Functions。
-
我担心我会得到跟踪异常
-
什么是跟踪异常?使用
Include或Load将跟踪实体。至于WhenAll,上下文不是线程安全的。
标签: c# eager-loading entity-framework-core-3.1