【发布时间】:2011-01-05 15:36:43
【问题描述】:
假设我有 2 个表:Message 和 SuperMessage
还有 3 个实体:Message(基础(非抽象))、Comment(继承自 Message)和 SuperMessage(继承自 Message)
Message 有一个不可为空的 MessageType 字段,用作鉴别器。
- MessageType = 1 表示它是一条消息
- MessageType = 2 表示它是一个评论
- MessageType = 3 AND 并加入 SuperMessage 意味着它是 SuperMessage
问题是我无法在 SuperMessage 的 Mapping details 部分的 MessageType 上指定条件,因为它看不到 MessageType 字段,我无法忽略它。
我怎样才能让这些一起工作?
更新构建错误:
错误 3014:映射片段中的问题:模型中未强制执行从表 SuperMessage (ID) 到表 Message (MessageId) 的外键“外键约束 'FK_SuperMessage_inherits_Message”。需要创建关联或继承关系来强制执行此约束。
【问题讨论】:
-
如果您只是简单地忽略 SuperMessage 的 MessageType 并允许 TPT 继承启动,它会起作用还是会出错?
-
@jeremcc 是的,我已经尝试过了,我得到了错误(我刚刚在上面添加)
-
自己玩一个简单的例子。我会告诉你我发现了什么。
-
如果您在映射窗口中添加
Message表,您应该能够看到MessageType。你这样做了吗?也就是说,我不知道答案,因为我从未尝试过。 -
我认为这是不可能的,继承策略不能混合在一个继承层次结构中。每个继承的实体类型树都必须遵循一个继承策略。不幸的是,这在 Code-First 中是不可能的。
标签: entity-framework entity-framework-4 linq-to-entities