Подтвердить что ты не робот

Несколько ассоциаций от одного объекта до двух объектов одного и того же типа сущности

Я пытаюсь сначала использовать код и свободный 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 - два внешних ключа из одной таблицы

4b9b3361

Ответ 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 для кода.

Проверьте код, который он генерирует. вы получите пример того, как делать что-то.