2011-08-28 107 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中的所有表格,並且在更新數據庫後重新添加它們,這將會執行鑽取操作

相關問題