在MVC

2013-09-05 61 views
1

在MVC中使用的DbContext類有道我們創造的DbContext車型,如在MVC

public class Model1 : DbContext 
    { 
     public Model1() 
      : base("DefaultConnection") 
     {} 
     public DbSet<SomeObj> SomeObjSet { get; set; } 
    } 

//another model 

public class Model2 : DbContext 
     { 
      public Model2() 
       : base("DefaultConnection") 
      {} 
      public DbSet<SomeObj2> SomeObjSet { get; set; } 
     } 

的然後我們用控制器像

public class SomeController : Controller 
    { 
     private Model1 db1 = new Model1(); 
     private Model2 db2 = new Model2(); 

     public ActionResult Action1() 
     { 
      //do sth with Model1 and return 
      return View(db1.SomeObjSet.ToList());// 
     } 

     public ActionResult Action2() 
     { 
      //do sth with Model2 and return result 
      return View(db2.SomeObjSet.ToList());// 
     } 

但我的問題是,在這種方式,我們正在創建多個DBConnections。將兩個模型組合成一個模型併爲每個控制器設置一個專用模型更好嗎?

回答

2

但我的問題是,這不是這樣我們正在創建多個DBConnections。

不,別擔心。實體框架(或者更具體地說它依賴的ADO.NET)處理連接池中的實際數據庫連接。所以不要將DbContext與實際的DbConnection混淆。這是兩個完全不同的東西。

+0

剛糾正這個 –

1

其實,有這些類型的場景標準方式..
Unit Of Work & Generic Repository with Entity Framework 5

另外,請訪問這個帖子:Understanding and Implementing Repository and Unit of Work Pattern in ASP.NET MVC Application

我複製下列幾個文本從第二個鏈接。

現在想象一下,我們有在 數據庫多個表的情況。然後,我們需要創建多個存儲庫,以便將域模型映射到數據模型。現在有多個存儲庫 類存在問題。

問題是關於ObjectContext對象。如果我們創建了 多個存儲庫,它們是否應該分別包含它們的ObjectContext ?我們知道同時使用ObjectContext對象的多個實例可能是一個問題,所以我們是否應該真正允許每個 存儲庫包含它們自己的實例?

解決此問題。爲什麼要讓每個Repository類實例擁有其自己的ObjectContext實例。爲什麼不在一些中心位置創建 ObjectContext實例,然後在實例化實例時將這個實例傳遞給 庫類。現在這個 新類將被稱爲UnitOfWork,並且此類將是 ,負責創建ObjectContext實例並將所有存儲庫實例移交給控制器。