2013-03-27 99 views
2

我是實體框架和.NET的新手,正在構建MVC 4應用程序。我想我對我的數據庫上下文實例應該在哪裏創建有點困惑。在我的應用程序中,我有幾個層次:Web,Business,Data Access,Database(這些都是單獨的項目)。在數據訪問層中,每個表有一個類。我看到的一個示例顯示了在數據訪問層內的每個方法內創建上下文(我可能誤解了它)。將多個表作爲業務邏輯的一部分進行更新時,這似乎不太實際。看起來在每個數據訪問層方法內創建一個新的上下文的結果是這樣的錯誤:更新多個表時An entity object cannot be referenced by multiple instances of IEntityChangeTracker實體框架和MVC在業務層或數據訪問層中創建DbContext

那麼可以在業務層方法中創建上下文,然後將其傳遞給數據訪問層方法嗎?還是有更好的方法來做到這一點?

像這樣的事情在上下文來自於業務層:

public User RetrieveUserById(int id, MyDbContext ctx) 
    {    
     User findUser = ctx.Users.Find(id); 
     return findUser; 
    } 

,而不是創建數據訪問層方法內上下文:

public User RetrieveUserById(int id) 
    { 
     var ctx = new MyDbContext(); 
     User findUser = ctx.Users.Find(id); 
     return findUser; 
    } 

我感謝幫助!

+1

EF *是* DAL。 – Moho 2013-03-27 22:49:55

+0

我明白你在說什麼了。我剛剛創建了一個單獨的項目,其中包含用於對由EF生成的實體執行CRUD操作的類。所以EF爲每個表生成一個類,然後爲每個表創建一個類來執行CRUD操作。這不是一個好主意嗎? – ssn771 2013-03-27 22:54:53

+0

隨着你如何描述你的方法,這更多的是一種可重複使用的模式。 orm負責dal和mapper。 – Justin 2013-03-27 23:12:08

回答

5

數據訪問層。創建一個「工作單元」類,它與DbContext一起存在於數據層中。 嘗試搜索「Asp.net工作模式單元」。

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application1

基本上,它是一個集中的地方,召集多個倉庫/桌,這樣就可以在多個存儲庫的作用不用設置你的背景。您不必完全按照所示使用它。您可以修改它以符合您的需求。