免责声明:严格来说,我这里的关系不是多对多关系,但鉴于它使用关联表,我认为最好稍微不那么准确,以便更好地了解我的意思我在做。
我的数据库中有以下三个表的等价物:
Customer
---------
CustomerID PK
...
CustomerAddress
---------
CustomerID PK, FK -> Customer
AddressNo PK
... address columns ...
CustomerPrimaryAddress
--------------
CustomerID PK, FK -> Customer
AddressNo FK -> CustomerAddress (with CustomerID, so CustomerID
participates in both relationships)
如果这不明显,这里的目的是允许每个客户有多个地址,同时为每个客户最多指定一个地址作为“主要”地址。我正在使用关联表来避免在
PrimaryAddressNumber
上放置可为空的 Customer
列,然后创建从 Customer
到 CustomerAddress
的外键。这一切都很好,但是 EF 然后将
CustomerPrimaryAddress
实体放在我的模型中。由于它的唯一目的是用作关联表,因此我无需在代码中表示该表。我从概念模型中删除了 CustomerPrimaryAddress
表,然后在 Customer
和 CustomerAddress
之间创建了一个关联,如下所示:Table Customer CustomerAddress
Multiplicity 1 0..1
然后我映射了关联以使用存储模型中的
CustomerPrimaryAddress
表,并且所有列都映射得很好,或者我是这么认为的。我的问题是现在 EF 提示
CustomerID
中的 CustomerPrimaryAddress
被映射到我的关联中的两个位置,因为它同时映射到 Customer
和 CustomerAddress
。有没有办法解决?我不想在
Customer
中添加一个可为空的列来表示主地址号,因为从 DBA 的角度来看,这不仅不是一个令人愉快的选择,EF 还会提示具有循环关系,我将不得不中断插入在代码中。 最佳答案
在这里大声思考:
Customer
---------
CustomerID PK
...
CustomerAddress
---------
AddressNo PK
CustomerID FK -> Customer, non-nullable
... address columns ...
CustomerPrimaryAddress
--------------
CustomerID PK, FK -> Customer
AddressNo FK -> CustomerAddress
这似乎应该使基数正确,但我可能错过了一些东西。
关于entity-framework - EF4 中的多对多关系与 "Shared"列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6116480/