E2L:你如何处理参与多种关系的外键?

时间:2009-02-24 17:40:36

标签: entity-framework database-design linq-to-entities

我有一个像这样的数据库模型

FlowObject
FlowObjectID(PK)
说明
活动

ProcessObject
FlowObjectID(PK,FK)
HasSubmit

DecisionObject
FlowObjectID(PK,FK)
YesFlowObjectID(FK)
NoFlowObjectID(FK)
YesCaption
NoCaption

当我尝试使用创建我的实体模型时,我在项目中收到此警告。

外键约束'FK_ProcessObject_FlowObject1'已从存储模型中省略。表'Investigations.Store.ProcessObject'的列'FlowObjectID'是参与多个关系的外键。一对一实体模型将无法验证,因为数据不一致是可能的。

???

为什么它掉了我的外键?因为“一对一的实体模型不会验证,因为数据不一致是可能的。”

所以听起来它说因为数据不一致而放弃了FK但是放弃FK实际上会降低日期的一致性?

我应该重新设计我的数据库吗?无论如何,L2E是否可以处理参与多种关系的FK?让FK参与多种关系会被认为是不好的数据库设计吗?

2 个答案:

答案 0 :(得分:3)

您所描述的,转换为面向对象的术语,是FlowObject包含一个可选的ProcessObject和一个可选的DecisionObject。如果这是您的实际意思,那么数据库架构是正确的。

如果您尝试使用ProcessObject和DecisionObject 扩展 FlowObject,则可能存在不一致,因为ProcessObject和DecisionObject行都可能存在。为消除不一致性,union-subclass建模技术是合适的:只存在ProcessObject和DecisionObject表,每个表包含所有相关字段,FlowObject作为抽象基类,成为一个视图,包含公共基本字段之间的联合。两张桌子。

答案 1 :(得分:2)

我在尝试重构this时遇到了同样的错误。在EFv1(.NET 3.5)中cannot be solved。在EFv4(.NET 4.0)中,您可以将独立关联(EFv1中唯一可用的关联/关系)更改为外键关联,它将起作用。但FK协会还有其他一些缺点,所以它不是一颗银弹。