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