EF Core/LINQ:Select()与异步预加载哪个方案更优?
EF Core中异步预加载Include与同步Select映射DTO的效率及异步性疑问
我原本打算用Select()把大型实体映射成DTO,但发现Select()不支持await关键字,现在纠结两个选择:是继续用异步预加载的方式,还是用同步的Select()就能达到同样的高效效果?
目前我是通过创建如GetObjectWithPrice、GetObjectWithPriceAndDate这类包含特定关联关系的方法来模拟Select()的功能,用的是异步预加载(Include)的方式。现在考虑改用Select()直接映射DTO,但它的同步特性让我有点担心性能问题。
补充代码(当前异步预加载实现)
public async Task<IReadOnlyList<Book>> GetAllBooksWithRelatedDataAsync() { var books = await context.Books .AsNoTracking() .AsSplitQuery() .Include(d => d.Price) .Include(d => d.Images) .Include(d => d.Author) .ToListAsync(); return books; }
我疑惑的是,使用Select()时能不能像上面这样以异步方式使用?可能我误解了Select()的同步特性是因为它的工作机制和预加载不同?
内容的提问来源于stack exchange,提问作者Jimmy
相关产品推荐
相关产品推荐

