【发布时间】:2011-11-05 10:29:43
【问题描述】:
我正在使用 Entity Framework 4,并且我最近更改了一个对象的主键以包含 2 列而不是 1(它曾经只有它的 id - Guid - 现在它有一个 id 和一个版本- 整数)。
当我尝试创建另一个具有相同 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 个不同的对象(具有不同的版本和日期)。
【问题讨论】:
-
您是否也在数据库中更改了它?您是否在应用程序中正确设置了 guid?
-
是的,是的,请参阅表定义的编辑。谢谢!
-
这应该可以,但我怀疑您的 EDMX 现在不正确。作为测试,制作一个新 EF 模型。它适用于那个吗?
-
第二天,几行代码被添加到数据库中,它开始按预期工作。我讨厌海森堡。无论如何感谢您的帮助。
标签: entity-framework composite-primary-key