Can I mix Table per Hierarchy and Table per Type in Entity Framework?

本小妞迷上赌 提交于 2020-01-09 08:08:06

问题


Say I have 2 tables: Message and SuperMessage

and 3 entities: Message (base (not abstract)), Comment (inherits from Message) and SuperMessage (inherits from Message)

Message has a non-nullable MessageType field which is used as a discriminator.

  • MessageType = 1 means it is a Message
  • MessageType = 2 means it is a Comment
  • MessageType = 3 AND and join to the SuperMessage means it is a SuperMessage

The problem is that I cannot specify a condition on MessageType of the SuperMessage's Mapping details section because it cannot see the MessageType field and I cannot ignore it.

How can I make these work alongside eachother?

UPDATE Build Error:

Error 3014: Problem in mapping fragments:The foreign key 'Foreign key constraint 'FK_SuperMessage_inherits_Message' from table SuperMessage (ID) to table Message (MessageId):' is not being enforced in the model. An Association or inheritance relationship needs to be created to enforce this constraint.


回答1:


I reproduced this and got the same error as you. As far as I can tell, it appears that combining these two types of inheritance for a single base table is just not possible. I'd love to be proved wrong though. ;-)




回答2:


Have you tried adding an intermediate abstract entity type, i.e.:

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

Also check out a similar scenario I solved: EF: Can I mix TPH and TPT when abstract base and a few concrete types are in TPH-table and other types have their own table?



来源:https://stackoverflow.com/questions/4605892/can-i-mix-table-per-hierarchy-and-table-per-type-in-entity-framework

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!