在实体框架中加载嵌套集合

时间:2016-03-14 05:34:21

标签: c# entity-framework linq

我有以下课程:

1- PurchaseMaster :Has collection >> PurchaseDetail
2- PurchaseDetail :Has Product
3- Product

我希望购买带有详细信息和产品的PurchaseMaster。我尝试使用undere查询但返回错误:

var purchaseMasterModel = _purchaseMasters
        .Include("StoreMasters.Details")
        .Include("ProductHeader")
        .FirstOrDefault(row => row.Code == code);

var purchaseMasterModel = _purchaseMasters
        .Include("StoreMasters.Details")
        .Include("StoreMasters.Details.ProductHeader")
        .FirstOrDefault(row => row.Code == code);

var purchaseMasterModel = _purchaseMasters
        .Include("StoreMasters.Details")
        .Include("Details.ProductHeader")
        .FirstOrDefault(row => row.Code == code);

我收到了这个错误:

  

指定的包含路径无效。 EntityType'DataLayer.Context.StoreDetail'不声明名为'ProductHeader'的导航属性。   我的课程是这样的:

public class PurchaseMaster:BaseEntity
 {
  public virtual ICollection<PurchaseDetail> PurchaseDetails { get; set; }
 }



 public class PurchaseDetail:BaseEntity
   {
     public PurchaseMaster PurchaseMaster { get; set; }
     public Guid PurchaseMasterId { get; set; }
     public ProductHeader ProductHeader { get; set; }
     public Guid ProductHeaderId { get; set; }
    }

public class ProductHeader:BaseEntity
{
   public virtual ICollection<PurchaseDetail> PurchaseDetails { get; set; }
}

1 个答案:

答案 0 :(得分:2)

您已选择PurchaseMaster,因此不应指定StoreMaster

您还必须使用属性名称。 ProductHeader有一个属性 PurchaseDetails ,但没有详细信息

以下查询应该有效:

var purchaseMasterModel = _purchaseMasters
        .Include("PurchaseDetails")
        .Include("PurchaseDetails.ProductHeader")
        .FirstOrDefault(row => row.Code == code);