【发布时间】:2016-04-02 16:38:21
【问题描述】:
当我在我的 asp.net mvc Web 应用程序中实现一个存储库类时,我有一个关于如何管理我的 Dispose 方法的问题。
目前我有以下:-
- 我正在使用 VS 2013,并创建了一个新的 asp.net mvc-5 Web 应用程序。
- 我使用实体框架 6.0 在我的 Web 应用程序中映射我的数据库表并生成一个 .edmx 文件。
- 我使用“MVC 5 控制器,使用实体框架”脚手架为我的一个模型对象创建了一个新的 Controller 类。
现在在生成的控制器类中,我得到了这个 dispose 方法:-
public class DeptsController : Controller
{
private ApplicationDbContext db = new ApplicationDbContext();
//code goes here
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
}
现在我想将我的数据访问代码移动到一个单独的 Repository 类中,并在 Repository 类中而不是在控制器类中启动我的 DbContext 对象。
所以我创建了以下存储库类:-
public class repository
{
private ApplicationDbContext db = new ApplicationDbContext();
//code goes here...
public void Dispose()
{
db.Dispose();
}
我修改了我的控制器类以使用存储库类,如下所示:-
public class DeptsController : Controller
{
//private ApplicationDbContext db = new ApplicationDbContext();
private repository repo = new repository();
protected override void Dispose(bool disposing)
{
if (disposing)
{
repo.Dispose();
}
base.Dispose(disposing);
}
}
所以任何人都可以就以下内容提出建议:-
- 因为我将把我的数据访问逻辑移动到我的存储库中,所以除了 DbContext 之外我还需要处理什么?我的意思是在使用存储库之前,在控制器内部调用
base.Dispose(disposing);将确保正确处理所有非托管资源.. 但是当我将数据访问移动到存储库内部时,我如何确保消耗所有非托管资源由存储库处置??并且在控制器类中调用 base.Disposed(disposing) ,也会释放存储库类中消耗的任何非托管资源?
任何人都可以对此提出建议吗?
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-5 dispose