Pet*_*ter 5 asp.net dispose entity-framework unit-of-work repository-pattern
最近,我开始深入研究Repository Patterns和UnitOfWork的概念,同时探索EntityFramework.
基于MVC示例制作了我自己的实现,他们从Controller中处理UnitOfWork,如下所示:
protected override void Dispose(bool disposing)
{
unitOfWork.Dispose();
base.Dispose(disposing);
}
Run Code Online (Sandbox Code Playgroud)
我根本没有进入MVC,而且在Webforms中也很新,但是我认为它们会覆盖Controller dispose方法,以便将UnitOfWork作为"其他所有内容"处理掉.
基本上我想在我的ASP.NET WebForms网站中实现相同的概念,并将页面代码后面使用的UnitOfWork与处理页面本身一起处理.
我考虑过从生命周期中添加相同的Page_Unload事件,但我不确定这是否是正确的方法,因为我之前没有搞过这些事情.我的想法如下:
protected void Page_Unload(object sender, EventArgs e)
{
unitOfWork.Dispose();
base.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能安全地实现这一目标,我是否走在正确的轨道上?
首先:不要发明轮子。
使用依赖注入框架,例如:StructureMap、Ninject、Unity 等...
您的UoW应在Web 请求开始时启动,并在请求结束时释放。
换句话说:EF 的 DataContext 应该在请求启动时初始化。然后您可以将其存储在某个地方(会话,...),并且可以为该请求重用它。每个请求一个 DataContext 实例。
但如果你尝试自己做,你就错了,使用依赖注入框架会让事情变得如此简单。
该框架可以处理DataContext (UoW) 的生命周期。