最近,我开始探索存储库模式和UnitOfWork的概念,同时探索EntityFramework。
我基于MVC示例实现了自己的实现,在该示例中,他们从Controller处释放UnitOfWork,如下所示:
protected override void Dispose(bool disposing)
{
unitOfWork.Dispose();
base.Dispose(disposing);
}
我完全不喜欢MVC,Webforms也很新,但是我认为它们覆盖了Controller的dispose方法,以便像其他“所有东西”一样处理UnitOfWork。
基本上,我想在我的ASP.NET WebForms网站中实现相同的概念,并处理在Page的代码后面使用的UnitOfWork,以及处理Page本身。
我考虑过从生命周期中将其添加到 Page_Unload 事件中,但是我不确定这是否是执行此操作的正确方法,因为我之前从未对此感到困惑。我的想法如下:
protected void Page_Unload(object sender, EventArgs e)
{
unitOfWork.Dispose();
base.Dispose();
}
我该如何安全地实现这一目标?我走在正确的轨道上吗?
最佳答案
首先:不要发明轮子。
使用依赖注入(inject)框架,例如:StructureMap,Ninject,Unity等。
您的 UoW 应该以 Web请求的开头开头,当请求结束时,处置。。
换句话说:EF的DataContext应该在启动请求时初始化。然后,您可以将其存储在某个位置( session ,...),并且可以将其重新用于该请求。 每个请求一个DataContext实例。
但是,如果您自己尝试执行此操作,那么使用依赖项注入(inject)框架的方式将很容易出错,这是错误的。
该框架可以处理DataContext (UoW)的生命周期。