为什么没有人在WebApi控制器操作后处理DbContext?

Acr*_*gma 12 .net c# entity-framework asp.net-mvc-4 asp.net-web-api

我知道各种教程以及完整的示例目标WebApiEntity Framework(甚至来自Microsoft)具有这样的WebApi控制器:

public HttpResponseMessage GetInternet(int id) {
    var context = new InternetDbContext();
    var result =
       (from internet in context.Internets
        where internet.Id.Equals(id)
        select internet).FirstOrDefault();
    if(result != null)
       Request.CreateResponse(HttpStatusCode.OK, result);
}
Run Code Online (Sandbox Code Playgroud)

但是,当我了解到Entity Framework像2年前,我每次发现对框架资源指出了它是多么极为重要部署DbContex最短可能的寿命与"例如using".而现在,人们似乎并没有放弃处理任何东西(他们的经理,存储库,DI容器......).

我在这里错过了什么吗?API调用的结尾是否会自动处理上下文?或者我必须使用HttpRequestMessageExtensions.RegisterForDispose()来自http://msdn.microsoft.com/en-us/library/dn153859(v=vs.118).aspx的内容

vol*_*pav 9

就个人而言,每当我看到类型实现时IDisposable,我几乎可以肯定我using在处理这种类型的新实例时会使用一个语句.

当变量超出范围时(例如,context当执行从GetInternet方法返回时变量超出范围),其内存最终将由垃圾收集器回收,但这并不意味着任何本机处理程序(例如将关闭文件处理程序或数据库连接,这会对您的应用程序产生非常严重的负面影响.

因此,请考虑始终将一个包装IDisposableusing构造中:

using (var context = new InternetDbContext())
{
  // Your code goes here
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 只是不要在using语句中创建HttpClient实例,即使它实现了IDisposable. (3认同)