MVC 3 EF 4.1
我选择两种方法来处理DbContext:
>在Application_BeginRequest中实例化,放入
HttpContext.Current.Items并在Application_EndRequest中进行处理。
>创建一次性UnitOfWork(kindof wrapper for DbContext)和
使用(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)。目的不是减少组件之间的耦合。