Entity framework 我可以在实体框架中混合每个层次结构的表和每个类型的表吗?

Entity framework 我可以在实体框架中混合每个层次结构的表和每个类型的表吗?,entity-framework,entity-framework-4,linq-to-entities,Entity Framework,Entity Framework 4,Linq To Entities,假设我有两个表:Message和SuperMessage 和3个实体:消息(基本(非抽象))、注释(从消息继承)和超级消息(从消息继承) 消息具有不可为空的MessageType字段,该字段用作鉴别器 MessageType=1表示它是一条消息 MessageType=2表示它是一条注释 MessageType=3,并且连接到超级消息意味着它是超级消息 问题是我无法在SuperMessage的Mapping details部分的MessageType上指定条件,因为它无法看到MessageT

假设我有两个表:Message和SuperMessage

和3个实体:消息(基本(非抽象))、注释(从消息继承)和超级消息(从消息继承)

消息具有不可为空的MessageType字段,该字段用作鉴别器

  • MessageType=1表示它是一条消息
  • MessageType=2表示它是一条注释
  • MessageType=3,并且连接到超级消息意味着它是超级消息
问题是我无法在SuperMessage的Mapping details部分的MessageType上指定条件,因为它无法看到MessageType字段,并且我无法忽略它

我怎样才能使它们一起工作

更新生成错误:


错误3014:映射片段时出现问题:模型中未强制执行外键“外键约束”FK_SuperMessage_从表SuperMessage(ID)到表Message(MessageId):“继承的消息”。需要创建一个关联或继承关系来强制执行此约束。

我重复了此操作,并得到了与您相同的错误。就我所知,将这两种类型的继承组合到一个基表中似乎是不可能的。但我希望被证明是错的

您是否尝试添加中间抽象实体类型,即:

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
还可以查看我解决的类似场景:

如果您只是忽略SuperMessage的MessageType并允许TPT继承生效,那么它是否有效,或者您是否遇到了错误?@jeremcc是的,我已经尝试过了,并且我自己用一个简单的示例处理了错误(我刚才添加了错误)。我会告诉您我找到了什么。如果在映射窗口中添加
Message
表,您应该能够看到
MessageType
。你做到了吗?也就是说,我不知道答案,因为我从未尝试过。我认为这是不可能的,继承策略不能在一个继承层次结构中混合使用。实体类型的每个继承树必须坚持一种继承策略。不幸的是,这甚至不可能与代码优先。从几个人听说,这一特定的场景是不可能的。所以我认为你是对的——不幸的是;)这个答案似乎暗示了另一种情况:-)