ホームページ >バックエンド開発 >C++ >異なるコンテキスト インスタンスを使用する場合、.AsNoTracking() はエンティティの更新にどのような影響を与えますか?

異なるコンテキスト インスタンスを使用する場合、.AsNoTracking() はエンティティの更新にどのような影響を与えますか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-09 13:06:41741ブラウズ

How Does .AsNoTracking() Affect Entity Updates When Using Different Context Instances?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。