【问题标题】:Using Include vs ThenInclude使用 Include 与 ThenInclude
【发布时间】:2018-09-15 01:39:08
【问题描述】:

我一直在尝试使用 Entity Framework,在遇到以下错误后,我尝试使用 ThenInclude 来解决它。

无法绑定传递给 Include 运算符的表达式“[x].ModelA.ModelB”

但现在看来我对它为什么确实解决了问题缺乏一些了解

这有什么区别:

.Include(x => x.ModelA.ModelB)

还有这个:

.Include(x => x.ModelA).ThenInclude(x => x.ModelB)

【问题讨论】:

  • 有一个字符串版本可以让你通过"ModelA.ModelB".
  • .Include(x => x.ModelA.ModelB) 在 EF6 中工作,但在 EF Core 中不起作用。在 EF Core 中,您必须使用“ThenInclude”。
  • @RavingDev :我很好奇 EF Core 上这种行为背后的原因,是否有任何文章解释它?我找不到任何人。
  • 在这种情况下没有区别。您使用的是哪个确切的 EF Core 版本?因为两者都适用于最新的 EFC 2.0.2
  • @IvanStoev 我正在使用 EFC 1.1.1

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


【解决方案1】:

“Include”适用于对象列表,但如果您需要获取多级数据,则“ThenInclude”是最合适的。让我用一个例子来解释它。假设我们有两个实体,公司和客户:

public class Company
{
    public string Name { get; set; }

    public string Location { get; set; }

    public List<Client> Clients {get;set;}
}

 public class Client
 {
    public string Name { get; set; }

    public string Domains { get; set; }

    public List<string> CountriesOfOperation { get; set; }
 }

现在,如果您只需要公司和该公司的整个客户列表,您可以使用“Include”:

using (var context = new YourContext())
{
  var customers = context.Companies
    .Include(c => c.Clients)
    .ToList();
}

但如果您想要一个以“CountriesOfOperation”作为相关数据的公司,您可以在包含如下客户后使用“ThenInclude”:

using (var context = new MyContext())
{
   var customers = context.Companies
    .Include(i => i.Clients)
      .ThenInclude(a => a.CountriesOfOperation)
    .ToList();
}

【讨论】:

  • 请您帮我理解ia.Include(i =&gt; i.Clients) .ThenInclude(a =&gt; a.CountriesOfOperation)中的意义
【解决方案2】:

不同之处在于,Include 将引用您最初查询的表,而不管它在链中的位置,而 ThenInclude 将引用最后包含的表。这意味着如果您只使用 Include,您将无法包含第二个表中的任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 2021-04-21
    相关资源
    最近更新 更多