代码之家  ›  专栏  ›  技术社区  ›  ctrlShiftBryan

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

  •  2
  • ctrlShiftBryan  · 技术社区  · 17 年前

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


    FlowObjectID(主键)
    说明
    活跃

    进程对象
    FlowObjectID(PK,FK)



    FlowObjectID(PK,FK)
    是FlowObjectId(FK)
    NoFlowObjectID(FK)
    是的
    诺卡普顿

    当我尝试使用createmyentitymodel时,我在我的项目中得到了这个警告。

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

    ???

    所以这听起来像是说它删除FK是因为数据不一致,但删除FK实际上减少了日期一致性?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Jeffrey Hantin    17 年前

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

    如果你想让ProcessObject和DecisionObject 延伸 FlowObject,不一致是可能的,因为ProcessObject和DecisionObject行都可能存在。为了消除不一致性,union子类建模技术是合适的:只有ProcessObject和DecisionObject表存在,每个表都包含所有相关字段,而FlowObject作为一个抽象基类,成为由两个表之间的公共基字段的并集组成的视图。

        2
  •  2
  •   Community Mohan Dere    9 年前

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