2012-10-17 36 views
0

是否需要控制正在創建的dbContext對象的數量?DbContext的專用構造函數

我認爲將Singleton模式應用於我的customDbContext類可能會更安全。但是,當我在軟件包管理器控制檯中執行Update-Database命令時,出現一個錯誤消息,我的dbContext沒有默認構造函數(由於實現了Singleton模式)。

問題:這真的是更安全還是應該爲簡單的解決方案?

public class WebshopContext : DbContext 
{ 
    private static WebshopContext database; 

    private WebshopContext() : base("DefaultConnection") { } 

    public static WebshopContext GetInstance() { 
     if (database != null) 
     { 
      return database; 
     } 
     else { 
      database = new WebshopContext(); 
      return database; 
     } 
    } 
} 

回答

2

DbContext對應於一個工作單元。你不應該創建一個單例,因爲它會在你的請求中共享。您不應爲每個數據庫請求創建新的DbContext,因爲單個工作單元中的不同數據庫請求(可能是控制器中的方法)應該共享相同的實體以便兼容。

爲您的控制器中的每個命令創建一個DbContext,並在請求完成時提交更改(如果它是更新請求)。

如果你不想傳遞你的DbContext,你可以爲你的DbContext創建一個"scope"