在使用DI添加dbcontext时是否需要调用context.dispose?

时间:2018-03-08 08:41:39

标签: c# entity-framework asp.net-web-api asp.net-core

我有一个使用EF的ASP.NET CORE Web API。我想知道是否需要手动处理我的dbcontext。使用DI添加dbcontext时,我理解这是作为范围服务添加的,它为每个请求重新创建上下文。

我已将其注册为服务:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<FeedbackContext>();
}

在控制器中使用如下:

public Controller(FeedbackContext context)
{
    _context = context;
}

我是否需要在控制器中处理上下文,如下所示:

protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        _context.Dispose();
    }
    base.Dispose(disposing);
}

或者这是为我处理的吗?

1 个答案:

答案 0 :(得分:7)

您无需致电Dispose。 ASP.NET Core将为您做到这一点。使用AddDbContext,上下文将作用于请求。请求完成后,将处理所有作用域对象。

事实上,您可以通过覆盖Dispose并在其中放置断点或记录某些内容来自行查看。

public class FeedbackContext : DbContext
{
    public override void Dispose()
    {
        base.Dispose();
    }
}