2017-09-24 149 views
0

我有一個基本控制器類,它具有以下DbContext。不用每個數據庫工作都使用「使用」語句,我可以依靠這個。迄今爲止,應用程序按預期運行我不確定是否真的需要Dispose部分。編號這是對EF CodeFirst使用DbContext的不好方法嗎?

private static Context _database; 

public static Context Db 
{ 
    get 
    { 
     if (_database == null) 
     { 
      _database = new Context(); 
     } 
     return _database; 
    } 
} 

protected override void Dispose(bool disposing) 
{ 
    if (_database == null) 
    { 
     _database.Dispose(); 
    } 

    base.Dispose(disposing); 
} 
+2

你不應該爲實體框架的'DbContext'使用'static'。在你的情況下,只要請求結束,控制器就會被釋放,下一個請求將會失敗。除非使用'static' /'const'值,否則不要在'Controller'中使用'static'。 –

+0

您應該瞭解依賴注入,而不是在基本控制器中聲明常用的東西。 – mason

+0

爲什麼不在控制器/或Dbcontext中使用靜態?靜態使其更快AFAIK。我應該使用Dbcontext和使用說明嗎?到目前爲止,應用程序和所有CRUD都能正常工作。 –

回答

0

不知道在這裏處理的是什麼類,但是如果它被丟棄了,那麼每次都會崩潰。您必須在調用dispose之後設置_database = null,否則將在處置狀態下使用它。如果你想做任何類型的多線程,這是行不通的。如果超過1個用戶同時使用它,則會崩潰。你將無法用靜態單元測試數據庫的使用。它會緩存您在一段時間後導致陳舊數據的所有數據,除非您只是用戶。

0

自動處理請求非常方便,不要將其作爲手動任務。

只是不要使用靜態,總是使用using聲明爲每個請求。