我的MVC4應用程序使用代碼優先的實體框架5.0。我想從計時器線程訪問我的SQL Server數據。是否有任何理由不能實例化,使用和配置我在主ASP.NET工作線程上使用的相同派生DbContext類的實例? (是的,我使用相同的using()
模式在主線程上實例化,使用和處理對象。)在後臺線程上使用DbContext
一個小問題上下文:我的網站在數據庫的表中有一個WebsiteEnabled字段。目前,我會爲每個GET請求執行數據庫提取以讀取該值。我想更改代碼以在後臺線程上每15秒讀取一次值,並將該值存儲在GET請求可以讀取的靜態變量中。我知道如果你嘗試在同一個線程上實例化同一個DbContext的多個實例,你會遇到問題;我不確定相同的限制是否適用於不同線程上相同DbContext的實例。
我們還使用後臺線程來檢查電子郵件並每隔一段時間進行一次清理。只要你在後臺線程上創建一個新的上下文(並將其處理掉),而不是嘗試使用你的主應用程序線程中的那個上下文,那麼你會沒事的。 DbContext不是線程安全的,這意味着你不能在多個線程中共享它。這並不意味着你不能擁有多個線程,每個線程都有自己的數據庫上下文副本。謹慎小心謹防併發問題(試圖同時更新一行)。 – Tommy
@Tommy:謝謝。請將此作爲答案而不是評論,以便我可以接受爲答案。 –
沒問題鮑勃,張貼爲答案。就像我說的,只要你將DbContext本地化爲一個線程,你就不會有任何問題。 – Tommy