在EF6中加载相关实体

时间:2017-07-15 12:59:39

标签: c# include entity-framework-6 lazy-loading eager-loading

我有3张彼此相关的表格:

Product有很多SuggestedPrices

Product有很多ProductPricing

所以我想像这样检索建议价格:

await ctx.SuggestedPrices
    .OrderByDescending(pp => pp.SuggestionDate)
    .Include(p1 => p1.Customer)
    .Include(p2 => p2.Product)
    .Include(p3 => p3.Product.ProductPricing)
    .ToListAsync()

根据您的要求:我添加了以下内容:

产品类别:

public class Product : ReportingBase {
    // Product-ProductPricing -> One Product has many Prices
    public virtual ICollection<ProductPricing> ProductPricing { get; set; }
    // Product-SuggestedPrices
    public virtual ICollection<SuggestedPrice> SuggestedPrices { get; set; }
}

ProductPricing类:

public class ProductPricing {
    // ProductPricings-Product
    public virtual Product Product { get; set; }
    public int ProductId { get; set; }
}

SuggestedPrice类:

public class SuggestedPrice : EntityBase {
    // SuggestedPrices-Product
    public virtual Product Product { get; set; }
    public int ProductId { get; set; }

    // SuggestedPrices-Customer
    public virtual ApplicationUser Customer { get; set; }
    public string CustomerId { get; set; }
}

但是当我添加行.Include(p3 => p3.Product.ProductPricing)时,我收到一条错误消息:

使用参考导航属性的虚线路径和集合导航属性的选择运算符

我如何摆脱这个错误?

感谢您的回答

1 个答案:

答案 0 :(得分:0)

经过一番挣扎后,我发现没有必要包含Product.ProductPricing,而且它已经存在了:

OrgPrice = p.Product.ProductPricing.FirstOrDefault().OrgPrice,
PriceAfterDiscount = p.Product.ProductPricing.FirstOrDefault().Price