【问题标题】:ThenInclude not working for an Entity Framework LINQ query [duplicate]ThenInclude 不适用于实体框架 LINQ 查询 [重复]
【发布时间】:2017-08-01 05:13:17
【问题描述】:

我有一个这样的数据库模型:

public class Customer
{
    public int CustomerId{ get; set; }

    public int OrderId { get; set; }
    public ICollection<Order> Orders { get; set; }
}

public class Order
{
    public int OrderId { get; set; }
    public int Amount { get; set; }

    public int ProductId { get; set; }
    public Product Product { get; set; }
}

public class Product
{
    public int ProductId { get; set; }
    public string Name { get; set; }
}

所以我们有一个可以下订单的客户。此订单包括一个产品,其中包括一个名称。我现在正尝试使用如下所示的 linq 语句返回完整模型:

_db.Customer.Include(c => c.Orders).ThenInclude(o => o.Product).SingleOrDefaultAsync();

但是ThenInclude(o =&gt; o.Product) 不起作用,因为 Orders 是一个 ICollection。来自德国的问候,并提前感谢您的帮助。

【问题讨论】:

  • ThenInclude() 是 EF Core 的一个特性,你在用吗?
  • 是的,使用最新版本的 EF Core 和 .Net Core
  • 什么不起作用?您发布的代码 sn-p 应该可以工作。

标签: c# linq entity-framework-core


【解决方案1】:

要在 EF 6 中加载相关实体,您应该使用Select 方法,如下所示:

_db.Customer.Include(c => c.Orders.Select(o=>o.Product)).SingleOrDefaultAsync();

ThenInclude 方法已添加到 EF Core 中,这是 EF 的最后一个版本。

【讨论】:

  • 方式? OP 在 EF6 上,这是 only 方式,或者在 EF Core 上,根本不支持 :)
  • 是的,但我以为他在使用 EF Core,这就是我这样称呼的原因
  • 那么你就有问题了,因为 EF Core 不支持“旧方式”。
  • 你确定吗?老实说,我最近没有测试过,但在最后一个 beta 版本中得到了支持
  • 是的,我是。自从 beta 版本(尽管最好将它们称为 alpha 和当前 - beta :)、官方 1.0 和 1.1(最新)之间的事件以来,许多事情都发生了变化。
【解决方案2】:

这里可能有问题,但您不需要更改:

public class Order
{
    public int OrderId { get; set; }
    public int Amount { get; set; }

    public int ProductId { get; set; }
    public Product Product { get; set; }
}

public class Order
{
    [Key, ForeignKey("Product")]
    public int OrderId { get; set; }
    public int Amount { get; set; }

    public int ProductId { get; set; }
    public virtual Product Product { get; set; }
}

为了让它按照您期望的方式运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2018-11-16
    • 2011-12-06
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多