具有Entity Framework 4.0的复合数据库密钥

时间:2009-12-18 00:57:08

标签: entity-framework primary-key composite-key

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

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

根据Jeremy Miller,“复合键使得任何类型的对象/关系映射和持久性总体上更难。”但他并没有真正说出原因。这与Entity Framework 4.0如何处理密钥有关吗?

2 个答案:

答案 0 :(得分:13)

不,EF4支持复合键就好了。

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

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

答案 1 :(得分: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)

解决这个问题的唯一方法就是复制该列,这样就完全无法实现它的目的。

祝你好运!