Несколько ассоциаций от одного объекта до двух объектов одного и того же типа сущности
Я пытаюсь сначала использовать код и свободный API для создания объекта, который содержит два разных объекта из одной таблицы. Другими словами, объект передачи содержит ссылку на два разных объекта резервуара: один - источник, а другой - пункт назначения.
Однако, когда я использую следующий код, я получаю исключение, в котором говорится, что "ссылочное отношение приведет к циклической ссылке, которая не разрешена".
modelBuilder.Entity<Transfer>()
.HasRequired<Tank>(t => t.Source)
.WithMany(t => t.OutboundTransfers);
modelBuilder.Entity<Transfer>()
.HasRequired<Tank>(t => t.Destination)
.WithMany(t => t.InboundTransfers);
Мое лучшее предположение, что он думает, что я указываю оба ключа на тот же Танк? Любая идея, как я могу это сделать?
EDIT: нашел ответ как добавление .WillCascadeOnDelete(false) из Код сущности Entity First - два внешних ключа из одной таблицы
Ответы
Ответ 1
Как вы сказали, вы должны добавить .WillCascadeOnDelete(false)
- fooobar.com/questions/28083/...
modelBuilder.Entity<Transfer>()
.HasRequired<Tank>(t => t.Source)
.WithMany(t => t.OutboundTransfers)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Transfer>()
.HasRequired<Tank>(t => t.Destination)
.WithMany(t => t.InboundTransfers)
.WillCascadeOnDelete(false);
Я просто добавил этот ответ, чтобы он не отображался в оставшемся без ответа списке уже без ответа с нулевыми ответами. Помечено как сообщество wiki:)
Ответ 2
Как обычно, Ладислав (EF Guru) отвечает на вопросы EF. (спасибо Ладиславу)
Просто альтернативный я нашел полезным.
У меня есть второе решение, которое я запускаю параллельно.
Если у меня есть первая проблема с кодом. Сначала я попробую:
Обратный инженер для кодирования первого решения. (От электроинструментов EF)
У меня есть тестовая БД, где я добавляю требуемую концепцию вручную в БД.
Я по-прежнему считаю, что это в БД более интуитивно понятное, чем первое, что нужно для первого кода.
Затем, используя электроинструмент
http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d
в Project/Solution щелкните правой кнопкой мыши Entity framework, сначала обработайте DB для кода.
Проверьте код, который он генерирует. вы получите пример того, как делать что-то.