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

EF Core 7中Include对Required关系生成Left Join而非Inner Join的原因

EF Core 7中Include关联Required父子关系生成Left Join的原因

核心结论

在EF Core 7中,即便父子关系已通过IsRequired()配置为子实体外键不可空,执行context.Parents.Include(p => p.Children)仍会生成left join,这是EF Core的设计逻辑,与使用Postgres或其他数据库无关。

具体原因

  • Include的设计目标:Include的作用是加载主实体的关联数据,而非过滤主实体本身。无论主实体是否存在对应子实体,EF Core都会返回所有主实体——没有子实体的主实体,其Children集合会是空列表,而非被查询结果排除。
  • IsRequired()的单向约束:IsRequired()仅约束子实体必须关联有效的主实体(即数据库中Children.ParentId不允许为空),但不限制主实体是否拥有子实体。主实体完全可以存在无对应子实体的情况,这种场景下Left Join能正确保留主实体记录。

如何生成Inner Join

如果需要过滤掉无对应子实体的主实体并生成Inner Join,需主动添加过滤条件:

context.Parents.Where(p => p.Children.Any()).Include(p => p.Children)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 21:43:10