1

私は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 回複製されていることがわかりました。

4

1 に答える 1

1

EMDX内のすべてのテーブルを削除し、データベースを更新した後にそれらを再追加します。これによりドリルが実行されます

于 2011-08-29T14:13:17.943 に答える