entity-framework - EF4 中具有 "Shared"列的多对多关系

标签 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)

如果不是很明显,这里的目的是允许每个客户有多个地址,同时将每个客户最多指定一个地址作为“主要地址”。我正在使用关联表来避免在 Customer 上放置可为 null 的 PrimaryAddressNumber 列,然后创建从 CustomerCustomerAddress 的外键

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

Table          Customer   CustomerAddress
Multiplicity   1          0..1

然后我将关联映射为使用存储模型中的 CustomerPrimaryAddress 表,所有列都映射得很好,或者我是这么想的。

我的问题是,现在 EF 提示 CustomerPrimaryAddress 中的 CustomerID 被映射到我的关联中的两个位置,因为它被映射到两个 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/

相关文章:

ASP.NET MVC 4 - 应用程序不接受新的连接字符串 - AppHarbor 部署问题

c# - 具有 UnitOfWork 模式的通用存储库模式

c# - Entity Framework 不导入具有 super 键的表

entity-framework - Entity Framework 4.3 Code First 无法创建 Datetime2?

c# - ASP.NET 动态数据看不到部分元数据 "buddy"类

c# - Entity Framework 等效于ADO.Net的DataRow.HasErrors?

.net - 当我不知道记录是否存在时,如何使用 Entity Framework 进行合并?

entity-framework - Entity Framework - 如果 SaveChanges 失败并且我不想进行某些更改该怎么办?

entity-framework-4 - 使用 Entity Framework 迁移播种和分支项目

entity-framework-4 - EF4 CTP5-HasColumnType不起作用