私はおそらく正しい方向に考えていません。私は、Dependency InjectionとASP.Net Coreについてはかなり新しいです。依存性注入によるバックグラウンドタスクのDbContext
私はASP.NetコアのWebサイトを持っており、Excelのシートからユーザーがアップロードするデータベースにデータをインポートする作業があります。 Excelシートは膨大なものになる可能性があり、データ変換タスクは時間を要するため、バックグラウンドで実行したいと考えています。すなわち、ユーザがシートをアップロードすると、応答は直ちに送信され、バックグラウンドジョブ/スレッドはデータをインポートする。
私はバックグラウンドジョブを実行しようとしています:私はに実行し、問題がプロセスのインポート方法があるASP.Net依存性注入コンテナを経由してAppDbContextにアクセスするリポジトリのクラスを持ってサービスを呼び出すことです
Task.Run(() => ProcessImport(model));
Scopedとして追加され、応答が返されるとコンテキストが破棄されます。実行時例外が発生しましたが、その処理後にコンテキストを使用することはできません。
私の質問は、この状況を処理する最善の方法は何ですか?私はAppDbContextシングルトンを作るべきですか?私はProcessImportメソッドでAppDbContextの新しいインスタンスを作成し、それを渡す必要がありますか?私はDbContextはスレッドセーフではないので、それは良いアプローチですか?
は "私はAppDbContextシングルトンを作るべきか?" Nope:https://stackoverflow.com/questions/3266295/net-entity-framework-and-transactions/3266481#3266481 – Steven
あなたは正しいですが、DbContextにアクセスする必要がある別のスレッドで実行中のタスクを処理する方法はありますか? –
これはとにかく危険なパターンです。 ASP.Netアプリケーションを使用して[長時間実行されるファイア&忘れたタスク](http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx)には使用しないでください。それを正しく行うと、タスクはそれ自身のプロセスで実行され、DIの問題全体はなくなります。 –