0

当尝试预先加载 PriceGridRow 时,会填充 PriceGridColumn 的 index 和 value 属性,但不会填充 Id 和 ProduceGridRowId。如果我尝试明确包含 PriceGridColumns 它会得到重复的列(即我有 10 列,但 EF 返回的对象有 20 列)并且返回的列的一半已完全填充,而另一半则没有。

我一直在拉扯我剩下的头发,试图弄清楚为什么会发生这种情况。任何人都可以根据我的配置看到为什么它会这样吗?谢谢!

我用来获取列的代码是:

public override PriceGrid GetLoadedById(object id)
{
    var priceGrid = Entities
        Include(x => x.PriceGridRows.Select(o => o.PriceGridColumns))
        .FirstOrDefault(x => x.Id == (int) id);


    return priceGrid;
}

这是有问题的课程

public class PriceGrid : DomainEntity<int>
{
    public string Description { get; set; }
    public Product Product { get; set; }
    public int ProductId { get; set; }

    public List<PriceGridRow> PriceGridRows
    {
        get { return _priceGridRow; }
        set { _priceGridRow = value; }
    }
}
public class PriceGridRow : DomainEntity<int>
{
    public PriceGrid PriceGrid { get; set; }
    public int PriceGridId { get; set; }

    public ProductOption ProductOption { get; set; }
    public int ProductOptionId { get; set; }
    public List<PriceGridColumn> PriceGridColumns { get; set; }

}

最后是第三层嵌套

public class PriceGridColumn : DomainEntity<int>
{
    public PriceGridRow PriceGridRow { get; set; }
    public int PriceGridRowId { get; set; }

    public int Index { get; set; }
    public decimal Value { get; set; }
}

这是我的映射文件

public class PriceGridMap : EntityTypeConfiguration<PriceGrid>
{
    public PriceGridMap()
    {
        HasKey(x => x.Id);

        Property(x => x.Description);
        HasRequired(x => x.Product);

        HasMany(x => x.PriceGridRows)
            .WithRequired(x => x.PriceGrid)
            .HasForeignKey(x => x.PriceGridId)
            .WillCascadeOnDelete();
    }
}
public class PriceGridRowMap : EntityTypeConfiguration<PriceGridRow>
{
    public PriceGridRowMap()
    {
        HasKey(x => x.Id);
        HasRequired(x => x.ProductOption);
        HasMany(x => x.PriceGridColumns)
            .WithRequired(x => x.PriceGridRow)
            .HasForeignKey(x => x.PriceGridRowId)
        .WillCascadeOnDelete();
    }
}
public class PriceGridColumnMap : EntityTypeConfiguration<PriceGridColumn>
{
    public PriceGridColumnMap()
    {
        HasKey(x => x.Id);
        Property(x => x.Index);
        Property(x => x.Value);
        HasRequired(x => x.PriceGridRow);
    }
}
4

1 回答 1

0

尝试从以下位置删除此映射线PriceGridColumnMap

HasRequired(x => x.PriceGridRow);

这基本上意味着PriceGridRow导航属性所属的关系没有反向导航属性。这是一个快捷方式:

HasRequired(x => x.PriceGridRow)
    .WithMany()...

但这与 中的映射相矛盾PriceGridRowMap

HasMany(x => x.PriceGridColumns)
    .WithRequired(x => x.PriceGridRow)...

这表示PriceGridRow导航属性确实具有反向导航属性,即PriceGridColumns.

于 2013-07-09T17:41:56.280 回答