You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 14:15:39