【问题标题】:Controller And Dbcontext DisposeController 和 Dbcontext Dispose
【发布时间】:2017-01-08 16:26:22
【问题描述】:

我正在使用全局异常处理程序处理未处理的异常。当请求处理过程中出现未处理的异常时,是否调用了控制器的dispose方法? (在 MVC 和 Web API 中?)

例如,我试图在整个请求中使用相同的 EF dbcontext。使用这个基类是否安全:

public abstract class BaseController : Controller
{
    public BaseController()
    {
        Database = new DatabaseContext();
    }

    protected DatabaseContext Database { get; set; }

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

}

【问题讨论】:

  • 如果您有复杂的生命周期并且需要线程化DbContext,您应该查看github.com/mehdime/DbContextScope,它非常强大且相当轻量但复杂,因此您需要一个用例。也就是说,仅仅阅读导致 lib 开发的背景对这个主题很有启发。

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


【解决方案1】:

迟到的回复但是.. 我不确定 dispose 是否保证在所有边缘情况下运行。但是你应该很容易测试你的场景。

话虽如此,处置您的 dbcontext 似乎并不重要。 AA原则应该作为良好的做法来完成。但是,正如 Jon Gallants 博客文章 here 所指出的那样,根据 MS 开发人员的说法,这不是必需的。因此,如果在极少数情况下,您的 dbcontext 没有被释放,这很可能根本不重要。

除此之外,我认为只要您尊重上下文的界限,它对您来说应该是安全的。 IE 不会在请求中的不同线程上并行运行操作,例如使用此上下文实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多