实体框架 - 具有复合主键的对象

时间:2011-08-28 10:56:01

标签: entity-framework composite-primary-key

我正在使用Entity Framework 4,我最近更改了其中一个对象的主键,包含2列而不是1(它曾经只有它的id - Guid - 现在它有一个id和一个版本 - int)。

当我尝试创建具有相同ID但版本不同的另一个对象时,我得到以下异常:

  

已成功提交对数据库的更改,但出现错误   更新对象上下文时发生。 ObjectContext可能是   处于不一致的状态。内部异常消息:AcceptChanges   无法继续,因为对象的键值与另一个键冲突   ObjectStateManager中的对象。确保键值是   在调用AcceptChanges之前是唯一的。

我查看了数据库,我确实有2个具有相同ID但具有不同版本的对象,就像我想要的那样。

如何让EF配合这些设置?

来自edmx文件的实体设置:

 <EntityType Name="Test">
     <Key>
         <PropertyRef Name="TestID" />
         <PropertyRef Name="TestVersion" />
     </Key>
     <Property Type="Guid" Name="TestID" Nullable="false" />
     <Property Type="Int32" Name="FolderID" Nullable="false" />
     <Property Type="String" Name="Name" Nullable="false" MaxLength="Max" FixedLength="false" Unicode="false" />
     <Property Type="Int32" Name="TestVersion" Nullable="false" />
     <Property Type="DateTime" Name="Date" Nullable="false" />
     <Property Type="String" Name="Owner" Nullable="false" MaxLength="Max" FixedLength="false" Unicode="false" />
     <Property Type="Binary" Name="TestObject" Nullable="false" MaxLength="Max" FixedLength="false" />
     <NavigationProperty Name="Folder" Relationship="Labster7Model.FK_Tests_Folders" FromRole="Test" ToRole="Folder" />
     <Property Type="String" Name="Description" Nullable="false" MaxLength="Max" FixedLength="false" Unicode="false" />
</EntityType>  

我将提供任何其他所需的代码部分。

修改
表格定义:
table

guid已在应用程序中设置。

编辑2:
我的数据库中有2个这样的对象用于测试。我刚看到上下文的Tests集合,它有一个重复两次,而不是有两个不同的对象(具有不同的版本和日期)。

1 个答案:

答案 0 :(得分:1)

删除EMDX中的所有表,并在更新数据库后重新添加它们,这将执行钻取