我有这样的数据库模型:
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。来自德国的问候,并提前感谢您的帮助。
答案 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; }
}
为了使其按照您期望的方式行事。