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

时间:2011-01-05 15:36:43

标签: entity-framework entity-framework-4 linq-to-entities

假设我有2个表:Message和SuperMessage

和3个实体:消息(基础(不是抽象)),注释(继承自Message)和SuperMessage(继承自Message)

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

  • MessageType = 1表示它是消息
  • MessageType = 2表示它是评论
  • MessageType = 3 AND并加入SuperMessage意味着它是SuperMessage

问题是我无法在SuperMessage的Mapping详细信息部分的MessageType上指定条件,因为它无法看到MessageType字段,我无法忽略它。

如何将这些工作与彼此并排?

更新构建错误:

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

2 个答案:

答案 0 :(得分:3)

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

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: 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?

答案 1 :(得分:1)

我复制了这个并得到了和你一样的错误。据我所知,似乎不可能将这两种类型的继承组合到一个基表中。我很想被证明是错的。 ; - )