【问题标题】:Entity Framework - an object with a composite primary key实体框架 - 具有复合主键的对象
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多