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

为何EF Core 7的AsSplitQuery会单独发起数据库往返?能否指定部分Include?

EF Core Split Query 相关问题解答

关于拆分查询的网络往返问题

EF Core 的 Split Query 目前确实是每个拆分部分单独发起数据库请求,而非合并为单次往返的多结果集查询,主要原因有几点:

  • 多结果集的结果映射逻辑复杂度更高,尤其是要精准匹配关联实体的关系,早期版本的 EF Core 在这部分的实现优先级低于解决笛卡尔积膨胀的核心需求;
  • 要兼顾不同数据库提供商的兼容性,并非所有数据库都支持多结果集查询,统一用单查询拆分的方式能保证更好的跨库适配性。

至于你提到的 MARS(多活动结果集):即使启用了 MARS,EF Core 的 Split Query 也不会并发执行多个查询。因为 DbContext 本身是线程不安全的,EF Core 会严格按顺序发送每个拆分后的查询,只是复用同一个数据库连接,结果也是按顺序处理,不会出现并行执行的情况。

针对部分 Include 设置 Split Query

可以的,从 EF Core 5 开始支持针对特定 Include 单独启用 Split Query,无需对整个查询的所有关联都应用拆分逻辑。示例代码如下:

context.Orders
    .Include(o => o.OrderItems).SplitQuery() // 仅对 OrderItems 使用拆分查询
    .Include(o => o.Customer) // Customer 仍使用默认的单查询加载
    .ToList();

这样就能灵活控制哪些关联实体用拆分查询,哪些保持单查询加载,平衡性能和查询复杂度。

内容的提问来源于stack exchange,提问作者Ladislav Mrnka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:24:59