Asp.net-Mvc
在 MVC 中實例化和處置 DbContext 的最佳方法是什麼?
MVC 3 + EF 4.1
我在兩種處理 DbContext 的方法之間進行選擇:
- 實例化
Application_BeginRequest,放入HttpContext.Current.Items配置中Application_EndRequest。- 創建一次性 UnitOfWork (kindof wrapper for
DbContext)並開始每個控制器動作using(var unitOfWork = new UnitOfWork()) { ... }請分享您的經驗:您更喜歡哪一個?每種方法的優缺點是什麼?
我建議您使用依賴注入框架。您可以
DbContext根據要求註冊您的container.RegisterType<MyDbContext>().InstancePerHttpRequest();並將其作為建構子參數注入控制器。
public class MyController : Controller { public MyController(MyDbContext myDbContext) { _myDbContext = myDbContext; } }如果註冊的類型實現
IDisposable了,那麼 DI 框架將在請求結束時釋放它。第一種方法:使用 ID 框架比手動實現要乾淨得多。此外,您的所有請求可能都不需要您的 UoW。
第二種方法:控制器不應該知道如何構造你的 UoW(DbContext)。目的不是減少組件之間的耦合。