質問: Entity Framework *Core* 2.1の新しい*ChangeTracker.Trackedイベント*を使用してクエリを読み込む方法を理解しようとしています。残念ながら、私はこれを実装する方法を理解できません。それは新しい機能であるため、記事を見つけることは不可能であり、Microsoftの公式ドキュメントサイトはヘルプやサンプルコードを提供していません。私のシナリオはかなり簡単です。私は以下の列を持つデータベースを持っています: *id、customerId、metadata。*ユーザーがこのテーブルにクエリを実行すると、クエリ結果セットをインターセプトし、すべての行に対して、現在ログインしているユーザーとcustomerIdを比較したいと考えています。私は、 *ChangeTracker.Trackedイベント*が返品結果セットをインターセプトする際に役立つことを願っています。私は上記の達成方法に関するいくつかのサンプルコードを探しています。
回答: 次に、 `ChangeTracker.Tracked`イベントの使用例を`ChangeTracker.Tracked`ます。 コンテキストに次のメソッドを追加します( `using Microsoft.EntityFrameworkCore.ChangeTracking;`する必要があり`using Microsoft.EntityFrameworkCore.ChangeTracking;` )。 ``` void OnEntityTracked(object sender, EntityTrackedEventArgs e) { if (e.FromQuery && e.Entry.Entity is YourEntityClass) { var entity = (YourEntityClass)e.Entry.Entity; bool isCurrentUser = entity.customerId == CurrentUserId; // do something (not sure what) } } ``` あなたのコンテキストコンストラクタでも`ChangeTracker.Tracked`アタッチしてください: ``` ChangeTracker.Tracked += OnEntityTracked; ``` `Tracked`イベントのドキュメントで説明されているとおり: > エンティティが追跡クエリから返されたか、またはコンテキストに添付されたか、またはコンテキストに追加されたために、コンテキストによってエンティティが追跡されたときに発生したイベント。 > > 言及するべきいくつかの事柄。 * イベントは、焼成され**ていない** 無追跡クエリ * このイベントは、追跡クエリ結果セットによって作成され、コンテキストによってまだ追跡されていない各エンティティインスタンスに対して発生します * イベントargsの`bool FromQuery`プロパティは、イベントが追跡クエリのマテリア`bool FromQuery`プロセスかユーザーコード( `Attach` 、 `Add`などの呼び出し)によって発生したかどうかを区別するために使用されます。 * イベントargsの`EntityEntry Entry`プロパティは、エンティティインスタンスおよびその他の関連情報(基本的に、非ジェネリック`DbContext.Entry`メソッドを呼び出すときに取得するのと同じ情報)にアクセスできます。