免责声明:严格来说,我这里的关系不是多对多关系,但鉴于它使用关联表,我认为最好稍微不那么准确,以便更好地了解我的意思我在做。

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

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 还会提示具有循环关系,我将不得不中断插入在代码中。

最佳答案

在这里大声思考:

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/

10-16 08:55