データベースで行われているのと同じ順序でエンティティを追加、変更、または削除する必要があります。
以下のコード スニペットを使用して、ObjectContext クラスの「SaveChanges」メソッドをオーバーライドし、追加、変更、または削除されたさまざまなエンティティを取得しています。
foreach (ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Deleted) の ObjectStateEntry エントリ) {
// 各エンティティに対する操作 }
データベースに 2 つのテーブル A と B があるとします。これらは無関係です。エンティティ フレームワークを使用して、これらのテーブルに対して以下の操作を行います。
- A に新しい行を挿入する
- B の行を更新する
- B に新しい行を挿入する
- A の行を更新します (手順 1 で挿入された行ではありません)。
- B の行を削除します (手順 2 と 3 で影響を受ける行ではありません)。
- B に新しい行を挿入する
- A に新しい行を挿入する
上記のコード スニペットを使用しているときに、挿入、更新、および削除がグループ化されていることに気付きました。つまり、1、3、6、7、2、4、5 の順序でエンティティを取得しています。
この投稿 (http://social.msdn.microsoft.com/forums/en-US/adodotnetentityframework/thread/d8448144-05dd-4c34-b93c-9336c3b62f6e/) には、順序を決定する明確な方法がないことが記載されています。 「SaveChanges」の前に行われた操作での挿入の数。
上記のコード スニペットは、これらの操作がデータベースで実行される正しい順序でフェッチされますか。
この順序が正しくない場合、正しい順序を取得する他の方法はありますか。