【问题标题】:E2L: How do you handle Foreign Keys that participate in multiple relationships?E2L:您如何处理参与多个关系的外键?
【发布时间】:2010-10-09 14:59:52
【问题描述】:

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

流对象
FlowObjectID (PK)
说明
活跃

进程对象
FlowObjectID (PK, FK)
已提交

决策对象
FlowObjectID (PK, FK)
YesFlowObjectID (FK)
NoFlowObjectID (FK)
是的标题
无字幕

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

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

???

为什么它丢弃了我的外键?因为“一对一的实体模型将无法验证,因为可能存在数据不一致。”

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

我应该重新设计我的数据库吗? L2E 是否有办法处理参与多个关系的 FK? FK 参与多个关系是否被认为是糟糕的数据库设计?

【问题讨论】:

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


    【解决方案1】:

    您所描述的(翻译成面向对象的术语)是 FlowObject 包含一个可选的 ProcessObject 和一个可选的 DecisionObject。如果这是您真正的意思,那么数据库架构是正确的。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-19
        • 1970-01-01
        • 2023-04-03
        • 2017-12-05
        • 1970-01-01
        • 2011-02-09
        • 1970-01-01
        相关资源
        最近更新 更多