Могу ли я смешать таблицу по иерархии и таблицу по типу в Entity Framework?

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

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

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

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

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

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

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

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

2 ответа

Решение

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

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

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, а другие типы имеют свою собственную таблицу?

Другие вопросы по тегам