12

我公司对大型数据库的重新设计,在数据库上大量使用了复合主键。

忘记性能影响,在 Entity Framework 4.0 中使用这个数据库时这会导致任何困难吗?数据库结构不太可能改变,我不是在寻找“哲学”辩论,但实际影响是什么?

根据Jeremy Miller的说法,“复合键通常会使任何类型的对象/关系映射和持久性变得更加困难。” 但他并没有真正说明原因。这与 Entity Framework 4.0 处理键的方式有关吗?

4

2 回答 2

13

不,EF4 很好地支持复合键。

问题是具有代理键和复合键的表。您只能在每个模型上设置一个键;该键可以有多个字段,但从设计者的角度来看,您只能有一个。不确定手动编辑 xml 或仅代码映射。

如果您需要在同一个表上使用复合键和代理键,则可以将字段设置为标识而不是键。ObjectContext 或 ObjectStateTracker 不会使用 Identity ( Id ) 字段,但会增加并且可以查询。

于 2009-12-18T01:46:32.993 回答
8

我遇到了 EF4 和复合键的问题。它不支持将列用作连接表中多个键的组件。

有关更多详细信息,请参阅我之前的问题Mapping composite foreign keys in a many-many relationship in Entity Framework。最重要的是,当您有一个连接表(描述多对多关系),其中两个关系都使用一个公共键时,您会收到类似的错误

错误 3021:映射片段中的问题...:表 PageView 中的以下列中的每一列都映射到多个概念性侧属性: PageView.Version 映射到(PageView_Association.View.Version,PageView_Association.Page.Version)

解决它的唯一方法是复制列,这完全违背了将它放在那里的目的。

祝你好运!

于 2010-10-12T05:18:46.323 回答