Отсутствует информация при загрузке с помощью 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
,