Это мой первый вопрос, поэтому, если есть проблемы с форматированием или неясные формулировки, пожалуйста, не стесняйтесь, сообщите мне.
У меня есть объект Item, который, помимо других свойств, имеет две ссылки на другие элементы ("GlobalItem" и "DepositItem") в одном и том же DBSet.
public class Item
{
public int ItemID { get; private set; }
public virtual Item GlobalItem { get; set; }
public virtual Item DepositItem { get; set; }
protected Item() { }
}
Отображение выполняется так:
public ItemMap()
{
HasKey(o => o.ItemID);
ToTable("Item", "dbo");
// Relationships
HasOptional(o => o.GlobalItem)
.WithMany()
.Map(m => m.MapKey("GlobalItemID"));
HasOptional(o => o.DepositItem)
.WithMany()
.Map(m => m.MapKey("DepositItemID"));
}
Процесс сборки успешен, но при попытке выполнить GetAll () выдается следующее исключение:
System.Data.Entity.Core.EntityCommandExecutionException: «Произошла ошибка при выполнении определения команды. Смотрите подробности во внутреннем исключении. '
Внутреннее исключение:
SqlException: Неверное имя столбца 'DepositItem_ItemID'.
Неверное имя столбца 'DepositItem_ItemID'.
Неверное имя столбца 'DepositItem_ItemID'.
Я знаю, что это исключение обычно вызывается простыми ошибками сопоставления, но в этом случае я застрял, поскольку убедился, что ColumnName и MapKey верны, и все обычные обходные пути, такие как явное определение DepositItemID в сущности и использование .HasForeignKey(k = k.DepositItemID)
вместо прежнего определения отображения ничего не изменило.
Есть ли у EF6 общая проблема с несколькими виртуальными свойствами, ссылающимися на себя? Может кто-нибудь объяснить мне, почему ключ сопоставления игнорируется для DepositItem, но не игнорируется для GlobalItem? Может кто-нибудь найти недостаток в моем дизайне?
С наилучшими пожеланиями и спасибо за ваши усилия,