免责声明:严格来说,我所拥有的并不是多对多的关系,但考虑到它使用了一个关联表,我认为为了更好地理解它会更好一些。我正在做什么。
我的数据库中有以下三个表:
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也会抱怨有一个周期性的关系,我会有在代码中打破插入。
答案 0 :(得分:2)
在这里大声思考:
Customer
---------
CustomerID PK
...
CustomerAddress
---------
AddressNo PK
CustomerID FK -> Customer, non-nullable
... address columns ...
CustomerPrimaryAddress
--------------
CustomerID PK, FK -> Customer
AddressNo FK -> CustomerAddress
这个似乎就像它应该得到正确的基数,但我可能错过了一些东西。