1

データベースで行われているのと同じ順序でエンティティを追加、変更、または削除する必要があります。

以下のコード スニペットを使用して、ObjectContext クラスの「SaveChanges」メソッドをオーバーライドし、追加、変更、または削除されたさまざまなエンティティを取得しています。

foreach (ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Deleted) の ObjectStateEntry エントリ) {
// 各エンティティに対する操作 }

データベースに 2 つのテーブル A と B があるとします。これらは無関係です。エンティティ フレームワークを使用して、これらのテーブルに対して以下の操作を行います。

  1. A に新しい行を挿入する
  2. B の行を更新する
  3. B に新しい行を挿入する
  4. A の行を更新します (手順 1 で挿入された行ではありません)。
  5. B の行を削除します (手順 2 と 3 で影響を受ける行ではありません)。
  6. B に新しい行を挿入する
  7. A に新しい行を挿入する

上記のコード スニペットを使用しているときに、挿入、更新、および削除がグループ化されていることに気付きました。つまり、1、3、6、7、2、4、5 の順序でエンティティを取得しています。

この投稿 (http://social.msdn.microsoft.com/forums/en-US/adodotnetentityframework/thread/d8448144-05dd-4c34-b93c-9336c3b62f6e/) には、順序を決定する明確な方法がないことが記載されています。 「SaveChanges」の前に行われた操作での挿入の数。

上記のコード スニペットは、これらの操作がデータベースで実行される正しい順序でフェッチされますか。

この順序が正しくない場合、正しい順序を取得する他の方法はありますか。

4

1 に答える 1

0

いいえ、操作の順序を変更することはできません。順序を制御する唯一の方法は、各操作を個別に実行することです (各操作の後に呼び出しますSaveChanges)。

于 2012-12-20T11:05:17.720 に答える