我是實體框架和.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;
}
我感謝幫助!
EF *是* DAL。 – Moho 2013-03-27 22:49:55
我明白你在說什麼了。我剛剛創建了一個單獨的項目,其中包含用於對由EF生成的實體執行CRUD操作的類。所以EF爲每個表生成一個類,然後爲每個表創建一個類來執行CRUD操作。這不是一個好主意嗎? – ssn771 2013-03-27 22:54:53
隨着你如何描述你的方法,這更多的是一種可重複使用的模式。 orm負責dal和mapper。 – Justin 2013-03-27 23:12:08