我可能沒有想到正確的方向。我對依賴注入和ASP.Net核心相當陌生。通過依賴注入進行後臺任務的DbContext
我有一個ASP.Net核心網站,其中一項任務是將數據從excel工作表導入用戶將要上傳的數據庫。 Excel工作表可能很龐大,數據轉換任務需要時間,因此我希望在後臺執行它們。即用戶將上傳表單,響應將立即發送,後臺作業/線程將導入數據。
我試圖運行在後臺作業:
Task.Run(() => ProcessImport(model));
我遇到的問題是,該進程導入方法通過ASP.Net依賴注入容器即調用有庫類來訪問AppDbContext服務作爲Scoped添加,並且一旦響應被髮回,上下文被處置。我得到一個運行時異常,你不能在處理它之後使用上下文。
我的問題是,處理這種情況的最佳方法是什麼?我應該創建AppDbContext單例嗎?我應該在ProcessImport方法中創建一個新的AppDbContext實例並傳遞給它?我讀過DbContext不是線程安全的,那麼這是一個好方法嗎?
不要:https://stackoverflow.com/questions/3266295/net-entity-framework-and-transactions/3266481#3266481 – Steven
你是對的,但如何處理在不同線程上運行的任務,需要訪問DbContext? –
無論如何,這是一個危險的模式。您不應該使用ASP.Net應用程序[執行長時間運行的「忘記任務」)(http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx)。如果你做得對,這個任務就會在自己的過程中運行,整個DI問題都消失了。 –