1

我正在使用 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>  

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

编辑:
表定义:
桌子

guid 在应用程序中设置。

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

4

1 回答 1

1

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

于 2011-08-29T14:13:17.943 回答