免责声明:严格来说,我这里的关系不是多对多关系,但考虑到它使用的是关联表,我认为准确度稍低一些会更好,以便更好地了解我在做什么。
我的数据库中有以下三个表的等价物:
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)
如果不是很明显,这里的目的是允许每个客户有多个地址,同时将每个客户最多指定一个地址作为“主要地址”。我正在使用关联表来避免在 Customer
上放置可为 null 的 PrimaryAddressNumber
列,然后创建从 Customer
到 CustomerAddress 的外键
。
一切都很好,但 EF 随后将 CustomerPrimaryAddress
实体放入我的模型中。由于它的唯一目的是用作关联表,因此我无需在代码中表示此表。我从概念模型中删除了 CustomerPrimaryAddress
表,然后在 Customer
和 CustomerAddress
之间创建了一个关联,如下所示:
Table Customer CustomerAddress
Multiplicity 1 0..1
然后我将关联映射为使用存储模型中的 CustomerPrimaryAddress
表,所有列都映射得很好,或者我是这么想的。
我的问题是,现在 EF 提示 CustomerPrimaryAddress
中的 CustomerID
被映射到我的关联中的两个位置,因为它被映射到两个 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/