6

EFコードの使用に関しては、最初に変更追跡の2つのオプションがあります。

  1. スナップショットベースの変更追跡
  2. プロキシを使用した通知ベースの変更追跡

変更追跡の各方法を使用して実行する場合は、次のコードを考慮してください。デフォルトの構成オプションを使用してDbContextインスタンスを想定します。 

var o = context.MySet.First();
o.MyProperty = 42;
context.SaveChanges();

1行目のコンテキストによってロードおよび追跡されたエンティティインスタンスの「MyProperty」の値がすでに42である場合、3行目の「SaveChanges」の呼び出し中の変更トラッカーの状態は異なります。 

  1. スナップショットベースの変更追跡-その状態は「変更なし」です。 
  2. プロキシを使用した通知ベースの変更追跡-その状態は「変更済み」です。 

通知ベースの変更追跡では、「SaveChanges」の呼び出し中に不要な更新ステートメントがデータベースに送信されることを考えると、ほとんどの開発者はスナップショットベースの変更追跡の動作を好むと思います。 

この行動の違いは意図的なものですか?

プロキシで通知ベースの変更追跡を使用するときに、スナップショットベースの変更追跡と同じ動作を実現する方法はありますか?

これはこの機能の提案に関連していると私は信じていることに注意してください -http://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/1015363-better-change-tracking-for-poco-proxies

4

1 に答える 1

6

この動作は意図的なものです。その理由は、同じように動作する古いベースのエンティティとの後方動作の互換性ですEntityObject。これらは、プロパティの変更を実際の変更と同じ値にカウントします。リンクされた記事は、スナップショットの変更の追跡でパフォーマンスの問題がある場合にのみ、スナップショットの変更の追跡を使用し、変更の追跡プロキシを選択することを新しい推奨事項として示しています。

于 2012-06-19T08:09:29.323 に答える