0

假设以下数据库模式:

Table A: AId (PK)

Table B: BId (PK)

Table C: CId (PK)

Table AB: AId, BId (composite PK, FKs to A and B), Data

Table BC: BId, CId (composite PK, FKs to B and C), Data

Table ABC: AId, BId, CId, Data

在数据库中,ABC有两个 FK:一个到ABon AIdand BId,一个到BCon BIdand CId

使用 EF 设计器并尝试从此数据库创建模型。

如果您Include foreign key columns in the model 检查过,它可以工作;但是在模型中包含 FK 列并不是很好。

如果您Include foreign key columns in the model 未选中,则只会ABC成功映射其中一个 FK。要查看出了什么问题,您必须查看.edmxxml(感谢 Craig!),然后您会看到以下错误:

警告 6037:存储模型中省略了外键约束“FK_ABC_BC”。表“Model.Store.ABC”的“BId”列是参与多个关系的外键。一对一的实体模型将不会验证,因为数据不一致是可能的。

我已经阅读了我可以在 SO 上找到的关于这个问题的唯一其他提及,我认为这不是同一个问题。在数据库设计级别我看不出有什么问题。我将暂时通过在ABand上施加代理键来解决这个问题BC,但我真正想知道的是:

如果它创建了一个模型来匹配数据库,那么 EF 担心在这里发生什么可能的数据不一致?

我能做些什么来说服它一切都会好起来的吗?

4

1 回答 1

1

我的观点是 EF 在这种情况下太聪明了,它会阻止您使用只能分配一个关系并使实体不可保存的实体,因为与第二个实体的关系将不存在。

如果多个关联基于相同的外键列,EF 也有可能在跟踪独立关联的状态方面存在一些内部问题,但这只是另一种猜测。通常,用于映射 EF 特征的数据库特征不能在多个构造之间共享。我现在能想到的唯一例外是主键和以它们自己的方式鉴别器列。

我想提一下,我根本不喜欢数据库中的这种关系。

于 2011-09-28T11:28:04.037 回答