首页 > 解决方案 > Entity Framework Core 3.1 Load() 异步显式加载

问题描述

我的代码中有很多 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();
}

问题是,我可以放弃awaitawait Task.WhenAll(AllAboveEagerLoadTasks)

标签: c#eager-loadingentity-framework-core-3.1

解决方案


正如 Gert 在评论中提到的并且我已经测试过自己,上下文不是线程安全的,所以不幸的是不能并行加载实体。EF5 确实为 SplitQueries 提供了解决方案。


推荐阅读