如何解决EF4中具有“共享”列的多对多关系
|| 免责声明:严格来说,我这里的关系不是多对多的,但是考虑到它使用的是关联表,我认为最好稍微降低精度以更好地了解我在做什么。 我的数据库中有以下三个表的等效项: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
然后,我映射了该关联以使用存储模型中的“ 5”表,并且所有列的映射都很好,所以我想。
我的问题是,现在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
看来应该正确处理基数,但是我可能错过了一些东西。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。