【问题标题】:Loading related entities in EF6在 EF6 中加载相关实体
【发布时间】:2017-12-20 11:16:40
【问题描述】:

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

建议价格等级:

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 =&gt; p3.Product.ProductPricing) 时,我收到一条错误消息:

参考导航属性使用虚线路径,集合导航属性使用 Select 运算符

如何摆脱这个错误?

感谢您的回答

【问题讨论】:

  • 不,这不是我的情况,我不能将 Select 运算符放在像 Product @FedericoDipuma 这样的实体上
  • SuggestedPrice 类添加到问题中,这样我们就有了您查询的所有元素。
  • 你在这里@FedericoDipuma
  • 如果您为您的收藏品使用复数名称,我会更容易理解。无论如何,根据发布的模型,Include 的用法是正确的,你不应该得到那个错误。除非模型与您展示的不同。
  • 您确定导航属性ProductPricings-Product 配置正确吗?另外,正如@Ivan 所建议的,请为集合使用复数名称(这是 EF 通常对基于常规的配置所期望的)。

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


【解决方案1】:

经过一番挣扎,我发现不需要包含Product.ProductPricing,它已经存在了:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多