Entity Framework - ограничения внешнего ключа не добавлены для унаследованного объекта - PullRequest
1 голос
/ 25 мая 2010

Мне кажется, что странное явление происходит с унаследованными сущностями (TPT) в EF4.

У меня есть три сущности. 1. Актив 2. Недвижимость 3. Деятельность

Свойство является производным типом Актива. В собственности есть много видов деятельности (многие ко многим)

При моделировании этого в моем EDMX все выглядит нормально, пока я не попытаюсь вставить новое свойство в базу данных. Если свойство не содержит никаких действий, оно работает, но все черт побери, когда я добавляю некоторые новые действия в новое свойство.

Как выяснилось после 2-х дней обхода в интернете, я заметил, что в хранилище EF (SSDL) некоторые ограничения между сущностями не были обнаружены в процессе обновления.

Таблица Property_Activity, которая связывает свойства и действия, показывает только одно ограничение FK_Property_Activity_Activity, но FK_Property_Activity_Property был отсутствует.

Я знал, что это аномалия Entity Framework, потому что, когда я переключил отношения в базе данных на:

Актив <-> Актив_Активность <-> Активность

После обновления собраны все ограничения внешнего ключа, и сохранение выполнено успешно, с действиями в новом свойстве или без них.

  1. Это предназначено или ошибка в EF?

  2. Как мне обойти эту проблему?

  3. Стоит ли вообще отказаться от наследства?

1 Ответ

2 голосов
/ 25 мая 2010
  1. Не плохой, но плохой визуальный дизайнер.
  2. Как правило, лучше всего просто управлять XML-сущностью вручную.
  3. Нет наследования хорошо работает во многих ситуациях.

Обычно я использую обновление из базы данных в визуальном конструкторе, но знаю, что у дизайнера есть свои причуды. Я просто использовал обновление из базы данных, чтобы заглушить основы того, что я хочу. Затем я вхожу в Entity XML и очищаю его так, как хочу. Просто заметьте, что сложные типы - это боль для дизайнера. Если вы планируете использовать сложные типы, будьте готовы хорошо изучить ваш Entity XML.

...