【问题标题】:Include / ThenInclude in EF Core在 EF Core 中包含/然后包含
【发布时间】:2018-03-16 07:36:19
【问题描述】:

假设我有这样的数据库表:

Continent -> Countries -> Cities
                       -> Lakes

现在我想包含它们

_db.Continents
 .Include(p => p.Countries)
   .ThenInclude(c => c.Cities)
 .Include(p => p.Countries)
   .ThenInclude(p => p.Lakes)

这是唯一的方法(包括国家两次)还是有其他方法?

【问题讨论】:

  • 查看生成的 SQL - 您只包含一次 Countries
  • 是的,这是唯一的方法——设计使然。您正在描述包含 paths。每条路径都包含一次。 documentation 中解释得很好。
  • @CamiloTerevinto 是的,我做到了,只是语法看起来有点奇怪。我想知道是否还有其他方法。
  • @IvanStoev 谢谢!如果你把它作为答案,我会标记它。

标签: c# .net-core entity-framework-core


【解决方案1】:

实际上从 EF Core 2.1 开始支持此功能。模式看起来像这样:

_db.Continents.Include(p => p.Countries).ThenInclude(c => c.Cities).ThenInclude((Country p) => p.Lakes)

【讨论】:

    【解决方案2】:

    如前所述,EF 只包含一次国家/地区。

    为了更好地阅读,你可以这样写:

    _db.Continents
     .Include(p => p.Countries.Select(s => s.Cities))
     .ThenInclude(p => p.Countries.Select(s => s.Lakes))
    

    【讨论】:

    • 错误答案。请参阅 OP 问题下方的评论。
    • Well Country 是一个 List 并且没有 Cities 属性。
    • @OrcusZ 这是 EF 6 语法。这也适用于 EF 核心吗?
    • 它不适用于 EF Core 2.2,选择语句应替换为 ThenInclude
    猜你喜欢
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多