2013-04-08 20 views
1

我正在開發一個使用實體框架的asp.net MVC4應用程序。在靜態類中爲所有視圖或具體類保留上下文嗎?

我是否應該將靜態類中的實體的上下文保持爲只有一個點來創建我的上下文,還是應該在每個控制器中創建上下文?

而且我必須自己調用Dispose()還是從GC安全地完成(如在第二個答案中所述:Should Entity Framework Context be Put into Using Statement?)。

如果我決定使用靜態類,是否有一個安全點來處理上下文變量(「應用程序的末尾」)?

我的靜態類的實例:

public static class ApplicationHelper 
{ 
    static ApplicationHelper() 
    { 
     Db = new ApplicationEntities(); 
    } 

    internal static readonly ApplicationEntities Db; 
} 

回答

2

的情況下不被認爲是線程安全的,所以有它在一個靜態變量可能是一個壞主意。此外,GC會在您的環境中根據您的環境在您未來的某個遙遠的時間點處置您的環境,因爲可能您的所有連接都用完了。換句話說,顯式調用Dispose。這通常使用using()聲明完成。總而言之,您應該使用DI容器來注入您的上下文,並以這種方式管理連接的生命週期,實現工作單元模式,該模式將通過存儲庫模式來管理上下文生命週期,或者明確地打開並在控制器的操作方法中關閉連接。

public ActionResult SomeAction() 
{ 
using(var db = new ApplicationEntities()) 
{ 
    //todo: use db 
} 
return View(); 
} 
相關問題