ホームページ > バックエンド開発 > C++ > Entity Framework コア アプリケーションが「2 番目の操作を開始しました」エラーをスローするのはなぜですか?それを修正するにはどうすればよいですか?

Entity Framework コア アプリケーションが「2 番目の操作を開始しました」エラーをスローするのはなぜですか?それを修正するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-03 16:51:39
オリジナル
806 人が閲覧しました

Why Does My Entity Framework Core Application Throw a

Entity Framework Core: 実行中の「2 番目の操作が開始されました」エラーを解決する

ASP.Net Core 2.0 および Entity Framework Core での開発中に最近発生した問題では、エラーが発生しました: 「前の操作が完了する前に、このコンテキストで 2 番目の操作が開始されました。」 InvalidOperationException によってスローされる例外は、前の操作が終了する前に同じコンテキストで複数の操作が開始されたことを示します。

コードベースを調査すると、エンティティのリストにさまざまなプロパティと関連データを設定するメソッドが特定されました。犯人として。問題のある方法には、Include ステートメントを使用して関連エンティティを組み込むクエリと、これらのエンティティをビュー モデルにマッピングするクエリが含まれていました。

根本的な問題は、DbContext がアプリケーション全体で解決および利用される方法に根ざしていました。依存関係の注入に IoC (制御の反転) を使用する場合、DbContext を Transient として登録する必要があります。これには、次のコード スニペットを使用する必要があります:

services.AddDbContext<MyContext>(ServiceLifetime.Transient);
ログイン後にコピー

の代わりに、

services.AddTransient<MyContext>();
ログイン後にコピー

または

services.AddDbContext<MyContext>();
ログイン後にコピー

。デフォルトの動作では、スコープ付きで DbContext を追加します。複数のスレッドがコンテキストにアクセスすると競合が発生する可能性があります

さらに、非同期操作と非同期ラムダ式により、この問題が悪化する可能性があります。 DbContext に Transient を使用すると、各クラスにそのインスタンスが付与され、複数のクラスにわたるエンティティへの変更が妨げられます。

この例外の詳細については、次のリソースを参照してください。 [https://docs.microsoft.com/en-us/ef/core/miscellaneous/warnings/second-operation-started](https://docs.microsoft.com/en-us/ef/core/miscellaneous/警告/2 回目の操作-開始)

以上がEntity Framework コア アプリケーションが「2 番目の操作を開始しました」エラーをスローするのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート