質問: 3つの異なる方法でトラッキングを無効にすることができることに気付きました。 * コンテキストプロパティの`AsNoTracking`による * 最終的なクエリを実行する前に`AsNoTracking`を`AsNoTracking`して * via `context.ChangeTracker.QueryTrackingBehavior` すべてのトラッキングを無効にしたい場合、これらの3つのアプローチには違いがありますか? 私が以前に各コンテキストプロパティの後に`AsNoTracking`を使用していて、最後のクエリで1回の呼び出しで置き換える(または`ChangeTracker`無効にする)と同じ効果がありますか?
回答: `AsNoTracking`と`AsTracking`は`IQueryable`拡張メソッドであるため、特定のエンティティではなくクエリの状態に関連付けられています( `DbSet`レベルで使用できるという事実は`IQueryable`実装しているからです)メソッドの説明の中に**all**という単語を書き留めておきます。 **AsNoTracking** > 変更トラッカーが返されるエンティティを追跡しない新しい照会を戻します。 > > **AsTracking** > 変更トラッカーが返されるすべてのエンティティの変更を追跡する新しいクエリを返します。 > > そして両方とも言う: > クエリのデフォルトのトラッキング動作は、 QueryTrackingBehaviorによって制御できます。 > > クエリは、エンティティを返し、存在しない場合、他の言葉では、 `AsNoTracking`または`AsTracking` *どこにでも*クエリ式ツリー内の呼び出し、クエリは、の値使用`ChangeTracker.QueryTrackingBehavior` 。 したがって、あなたの質問に対する答えは「はい」です。最終的なクエリや`ChangeTracker`使用して1回の呼び出しで同じ効果を得ることができます。 しかし、メモには1つのことがありますが、これはドキュメントで説明されていません。クエリ式ツリーに複数の`AsNoTracking` / `AsTracking`呼び出しが含まれている場合、 *最後の*呼び出しが優先されます。つまり、最後のクエリに`AsNoTracking`または`AsNoTracking`を追加すると、内側のトラッキングビヘイビアコールまたは`ChangeTracker`プロパティに関係なく、その動作を制御します。