嘿,我剛剛學會了如何使用擴展方法,並非常興奮地在我當前的項目中實現它。如何在靜態類中使用dbcontext? (ObjectDisposedException)
我的目標: 我想查一下我的表中是否存在一個輔助類的條目,因爲我打算使用它在多個控制器能夠確定在我的導航欄顯示其導航鏈接:
我的問題: 我不知道如何來訪問我的DbContext在我的靜態輔助類。我的dbcontext控制器需要一個參數,我不知道如何通過我的靜態類。我認爲創建一個新的dbcontext將解決我的範圍問題下面解釋,但我不明白我可以如何將選項參數傳遞給我的構造函數。
我的嘗試: 薪火ApplicationDbContext作爲論據。這適用於我的控制器中的單個方法調用,但在調用多個擴展方法時(要檢查用戶擁有哪個遊戲帳戶),我得到一個ObjectDisposedException。
ObjectDisposedException:無法訪問處置的對象。造成這種錯誤的一個常見原因是處理從依賴注入解決的上下文,然後嘗試在應用程序的其他地方使用相同的上下文實例。如果您在上下文中調用Dispose(),或者在使用語句中包裝上下文,則可能會發生這種情況。如果您正在使用依賴注入,則應該讓依賴注入容器負責處理上下文實例。 對象名稱:'ApplicationDbContext'。
從我的理解是一個範圍問題,其中第一個方法調用處理上下文,當我試圖在下一個調用中使用相同的上下文?我能做些什麼來解決這個問題?
我試着讀這個鏈接Cannot access a disposed object in ASP.NET Core when injecting DbContext但它沒有幫助我,因爲它需要Startup.cs類中的ApplicationBuilder。
解決方案更新 我設置在每一個的DbContext方法調用之後,因爲我把它改成一個變量。相反,我直接調用它傳遞的上下文中,它的工作原理:
感謝大衛和Simon
你是如何調用* *'HasDota2Account()'?你是否傳遞了一個處理過的'DbContext'? '_context'從哪裏來?這個錯誤似乎表明它在調用'UpdateNavLinks()'之前的確處理了。所以看起來你不應該處理它,或者應該在該方法中使用本地實例化的上下文。試圖共享數據上下文對象通常會導致這個問題。 – David
此外,在HasDota2Account數據庫是上下文相同的對象;當數據庫被處置,所以上下文是。如果嘗試在調用HasDota2Account之後使用上下文,它會給出相同的異常。 –
我從我的第一張圖片中的控制器調用它。 _context_是我的控制器上的一個字段,在構造函數中得到實例化。我不知道它是否被處置。我不認爲我知道如何實例化本地_dbcontext _,因爲它需要選項參數,我無法通過外部_of startup.cs_ –