EF4中具有“共享”列的多对多关系

时间:2011-05-24 20:31:55

标签: entity-framework entity-framework-4

免责声明:严格来说,我所拥有的并不是多对多的关系,但考虑到它使用了一个关联表,我认为为了更好地理解它会更好一些。我正在做什么。

我的数据库中有以下三个表:

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列,然后创建从CustomerCustomerAddress的外键。

这一切都很好,但EF然后将CustomerPrimaryAddress实体放在我的模型中。由于它的唯一目的是作为关联表,我不需要在代码中表示这个表。我从概念模型中删除了CustomerPrimaryAddress表,然后在CustomerCustomerAddress之间创建了一个关联,如下所示:

Table          Customer   CustomerAddress
Multiplicity   1          0..1

然后我映射了关联以使用存储模型中的CustomerPrimaryAddress表,并且所有列都映射得很好,或者我认为。

我的问题是,现在EF抱怨CustomerID中的CustomerPrimaryAddress被映射到我的关联中的两个位置,因为它映射到CustomerCustomerAddress

这有什么办法吗?我不希望在Customer添加一个可以为空的列来表示主要地址编号,因为从DBA的角度来看,这不是一个令人愉快的选择,EF也会抱怨有一个周期性的关系,我会有在代码中打破插入。

1 个答案:

答案 0 :(得分:2)

在这里大声思考:

Customer
---------
CustomerID PK
...

CustomerAddress
---------
AddressNo  PK
CustomerID FK -> Customer, non-nullable
... address columns ...

CustomerPrimaryAddress
--------------
CustomerID PK, FK -> Customer
AddressNo      FK -> CustomerAddress 

这个似乎就像它应该得到正确的基数,但我可能错过了一些东西。