2011-08-28 66 views
1

我正在使用实体框架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> 

我给你提供任何其他必要的部分代码。

编辑:
表定义:
table

GUID是在应用程序中设置。

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

+0

您是否也在数据库中更改它?你是否正确设置了应用程序中的guid? –

+0

是的,是的,请参阅表格定义的编辑。谢谢! – Noich

+0

这应该工作,但我怀疑你的EDMX现在是不正确的。作为测试,制作一个**新的** EF模型。它是否适用于此? –

回答

1

删除EMDX中的所有表格,并且在更新数据库后重新添加它们,这将会执行钻取操作

相关问题