Могу ли я смешивать Таблицу для Иерархии и Таблицу для Типа в Entity Framework? - PullRequest
7 голосов
/ 05 января 2011

скажем, у меня есть 2 таблицы: сообщение и сообщение SuperMessage

и 3 объекта: Сообщение (базовое (не абстрактное)), Комментарий (наследуется от Сообщения) и SuperMessage (наследуется от Сообщения)

Сообщение имеет необнуляемое поле MessageType, которое используется как дискриминатор.

  • MessageType = 1 означает, что это сообщение
  • MessageType = 2 означает, что это комментарий
  • MessageType = 3 AND и присоединение к SuperMessage означает, что это SuperMessage

Проблема заключается в том, что я не могу указать условие для MessageType раздела Сведения о сопоставлении SuperMessage, поскольку оно не может видеть поле MessageType и не может его игнорировать.

Как я могу заставить их работать рядом друг с другом?

ОБНОВЛЕНИЕ Ошибка сборки:

Ошибка 3014: проблема в отображении фрагментов: внешний ключ 'ограничение внешнего ключа' FK_SuperMessage_inherits_Message 'из таблицы SuperMessage (ID) в таблицу Message (MessageId):' не применяется в модели Для обеспечения соблюдения этого ограничения необходимо создать связь или отношения наследования.

Ответы [ 2 ]

3 голосов
/ 17 мая 2011

Вы пытались добавить промежуточный абстрактный тип сущности, то есть:

abstract     MessageBase      --> Message table
non-abstract Message          --> Message table when MessageType == 1
non-abstract Comment          --> Message table when MessageType == 2
abstract     SuperMessageBase --> Message table when MessageType == 3
non-abstract SuperMessage     --> SuperMessage table

Также проверьте похожий сценарий, который я решил: EF: Могу ли я смешивать TPH и TPT, когда абстрактная база и несколько конкретных типов находятся в таблице TPH, а другие типы имеют свою собственную таблицу?

1 голос
/ 05 января 2011

Я воспроизвел это и получил ту же ошибку, что и вы.Насколько я могу судить, кажется, что объединение этих двух типов наследования для одной базовой таблицы просто невозможно.Я бы хотел быть неправым.; -)

...