Entity Framework Core の .AsNoTracking(): パフォーマンスとトラッキング
Entity Framework Core (EF Core) は、取得されたエンティティの変更追跡を回避することでパフォーマンスを向上させる .AsNoTracking()
を提供します。この記事では、さまざまなコンテキスト インスタンスが関係する場合に、.AsNoTracking()
の使用がエンティティの更新にどのような影響を与えるかを検証します。
EF Core の変更追跡について
EF Core は通常、データベースから取得したエンティティを追跡し、効率的な更新のために変更を監視します。 .AsNoTracking()
これを無効にすると、変更が予期されない場合のパフォーマンスが向上します。
シナリオ: 個別のコンテキストでの取得と更新
私たちのシナリオには、.AsNoTracking()
を使用してエンティティ (ユーザーなど) を取得し、その後、別の EF Core コンテキストを使用してエンティティを更新することが含まれます。
.AsNoTracking()
.AsNoTracking()
が使用されると、取得されたエンティティはコンテキストから切り離されます。 このエンティティを新しいコンテキストで更新しようとしても、自動的に更新はトリガーされません。コンテキストはそれを既存のレコードとして認識しません。 変更されたエンティティを新しいコンテキストに手動でアタッチし、更新が必要であることを示すためにその状態を明示的に EntityState.Modified
に設定する必要があります。
省略.AsNoTracking()
逆に、.AsNoTracking()
が省略された場合、EF Core は取得されたエンティティを追跡します。 このエンティティを別のコンテキストで更新すると、EF Core によって自動的に処理されるため、手動での添付や状態設定の必要がなくなります。
正しいアプローチの選択
エンティティが変更されないことが確実な場合、.AsNoTracking()
を使用するとパフォーマンスが向上します。ただし、更新が予想される場合は、EF Core が追跡を自動的に処理するため、.AsNoTracking()
を省略すると更新プロセスが簡素化されます。 どちらを選択するかは、特定のニーズと、手動更新処理の複雑さよりもパフォーマンスの向上が上回るかどうかによって異なります。
以上が異なるコンテキスト インスタンスを使用する場合、.AsNoTracking() はエンティティの更新にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。