我正在使用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集合,它有一个重复两次,而不是有两个不同的对象(具有不同的版本和日期)。
答案 0 :(得分:1)
删除EMDX中的所有表,并在更新数据库后重新添加它们,这将执行钻取