Asp.net-Mvc

在 MVC 中實例化和處置 DbContext 的最佳方法是什麼?

  • August 8, 2011

MVC 3 + EF 4.1

我在兩種處理 DbContext 的方法之間進行選擇:

  1. 實例化Application_BeginRequest,放入 HttpContext.Current.Items配置中Application_EndRequest
  2. 創建一次性 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)。目的不是減少組件之間的耦合。

引用自:https://stackoverflow.com/questions/6987908