我正在使用實體框架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模型。它是否適用於此? –