ThenInclude不适用于Entity Framework LINQ查询

时间:2017-03-10 18:35:22

标签: c# linq entity-framework-core

我有这样的数据库模型:

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 => o.Product)不起作用,因为Orders是ICollection。来自德国的问候,并提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

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

_db.Customer.Include(c => c.Orders.Select(o=>o.Product)).SingleOrDefaultAsync();
EF Core中添加了

ThenInclude方法,这是EF的最后一个版本。

答案 1 :(得分:1)

这里可能有问题,但是你不需要改变:

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; }
}

为了使其按照您期望的方式行事。