私はEntity Framework 4を使用していますが、最近、オブジェクトの主キーの1つを変更して、1列ではなく2列を含むようにしました(以前はID-Guidのみでしたが、現在はIDとバージョン-intを持っています) .
ID が同じでバージョンが異なる別のオブジェクトを作成しようとすると、次の例外が発生します。
データベースへの変更は正常にコミットされましたが、オブジェクト コンテキストの更新中にエラーが発生しました。ObjectContext が矛盾した状態にある可能性があります。内部例外メッセージ: オブジェクトのキー値が ObjectStateManager 内の別のオブジェクトと競合するため、AcceptChanges を続行できません。AcceptChanges を呼び出す前に、キー値が一意であることを確認してください。
データベースを調べたところ、意図したように、同じ ID でバージョンが異なる 2 つのオブジェクトがあります。
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:
テスト用に DB にそのようなオブジェクトが 2 つあります。コンテキストの Tests コレクションを見ると、2 つの異なるオブジェクト (バージョンと日付が異なる) ではなく、そのうちの 1 つが 2 回複製されていることがわかりました。