Отсутствует информация при загрузке с помощью Entity Framework

При попытке загрузить PriceGridRow заполняются свойства индекса и значения PriceGridColumn, а 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);
    }
}

1 ответ

Решение

Попробуйте удалить эту строку сопоставления из PriceGridColumnMap:

HasRequired(x => x.PriceGridRow);

что в основном означает, что отношения PriceGridRow свойство навигации, к которому принадлежит, не имеет обратного свойства навигации. Это ярлык для:

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

Но это противоречит отображению в PriceGridRowMap:

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

который говорит, что PriceGridRow свойство навигации имеет свойство обратной навигации, а именно PriceGridColumns,

Другие вопросы по тегам