我正在使用实体框架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集合时,它有一个重复两次,而不是有两个不同的对象(具有不同的版本和日期)。
您是否也在数据库中更改它?你是否正确设置了应用程序中的guid? –
是的,是的,请参阅表格定义的编辑。谢谢! – Noich
这应该工作,但我怀疑你的EDMX现在是不正确的。作为测试,制作一个**新的** EF模型。它是否适用于此? –