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