Entity Framework コア: 「前の操作が完了する前に、このコンテキストで 2 番目の操作が開始されました」を解決します
エラー メッセージ「2 番目の操作」 Entity Framework Core の「前の操作が完了する前にこのコンテキストで開始されました」は、通常、複数のスレッドが同じ DbContext インスタンスに同時にアクセスしようとしていることを示します。これは、DbContext がスコープ付きサービスとして登録され、リクエストごとに新しいインスタンスが作成される場合に発生する可能性があります。
DbContext 登録のスコープ
デフォルトでは、Entity Framework Core DbContext をスコープ付きサービスとして登録します。これは、HTTP 要求またはスコープ指定されたサービスごとに DbContext の新しいインスタンスが作成されることを意味します。マルチスレッド環境では、これにより問題のエラー メッセージが表示される可能性があります。
一時的な DbContext 登録
この問題を解決するには、DbContext を一時的なサービス。これにより、個々のリクエスト ハンドラーごとに新しいインスタンスが確実に作成されます:
services.AddTransient<MyContext>();
または、ServiceLifetime.Transient:
services.AddDbContext<MyContext>(ServiceLifetime.Transient);
一時登録の欠点 >
DbContext を一時的なものとして登録することには欠点があります。コンテキストによって管理されるエンティティは、同じ DbContext インスタンスを使用する複数のメソッド呼び出しまたはクラスにわたって永続化することはできません。
その他の潜在的な原因
一時的な DbContext 登録に加えて、その他のエラーの考えられる原因は次のとおりです:
追加情報
DbContext の詳細ライフタイムとスレッド セーフについては、Entity Framework Core のドキュメントを参照してください:
以上がEntity Framework Core で「前の操作が完了する前に、このコンテキストで 2 番目の操作が開始されました」を修正する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。