当前位置:  开发笔记 > 编程语言 > 正文

渴望加载多对多 - EF Core

如何解决《渴望加载多对多-EFCore》经验,为你挑选了1个好方法。

您好我有很多关系设置如下.

public class order
{
    public int id { get; set; }    
    public virtual ICollection Products { get; set; }
}

public class product
{
    public int id { get; set; }
    public virtual ICollection Orders { get; set; }
}

public class OrderProducts
{
    public int OrderId { get; set; }
    public virtual Order Order{ get; set; }

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

我想将所有产品包含(急切加载)到他们的订单中,但是当使用与客户一起显示的相同方法时,我的产品列表会填充OrderProducts-objects而不是Product-objects

public IEnumerable GetAll()
{
    return dataContext.Orders
                      .Include(order => order.Customer)
                      // now include all products aswell..
}

我尝试过任何好运的东西

  .Include(order => order.Products.Where(op => op.OrderId == order.Id).Select(p => p.Product))

如果有人可以帮助我,我将非常感激...你也非常欢迎分享任何有关如何构建更高级lambda的好资源,因为我对此并不熟悉.



1> Robin Thoni..:

只需使用ThenInclude()声明:

public class order
{
    public int id { get; set; }    
    public virtual IList OrderProducts { get; set; }
}
//...
public IEnumerable GetAll()
{
    return dataContext.Orders
                      .Include(order => order.OrderProducts)
                      .ThenInclude(orderProducts => orderProducts.Product);
}

如前所述这里,很多一对多的关系尚未实现.你必须加载OrderProducts,然后Select(orderProducts => orderProducts.Product)

重要提示: IntelliSense完成可能会告诉您无法执行此操作,但您可以,只需进行真正的构建即可

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有