加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:35:36 所属栏目:百科 来源:网络整理
导读:我知道各种教程,以及针对WebApi具有WebApi控制器的实体框架(甚至从Microsoft)如下所示: public HttpResponseMessage GetInternet(int id) { var context = new InternetDbContext(); var result = (from internet in context.Internets where internet.Id.E
我知道各种教程,以及针对WebApi&具有WebApi控制器的实体框架(甚至从Microsoft)如下所示:
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);
}

但是当我了解了2年前的实体框架时,我发现的关于框架的每一个资源都指出了在最短的可能寿命期内DISPOSE DbContex是非常重要的.与’使用’.而现在,人们似乎并不放弃处理任何东西(他们的经理,存储库,DI容器…).

我在这里遗漏了什么吗? API调用的结束是否自动处理上下文?还是要从http://msdn.microsoft.com/en-us/library/dn153859(v=vs.118).aspx中使用像HttpRequestMessageExtensions.RegisterForDispose()这样的东西?

解决方法

就个人来说,每当我看到类型实现了IDisposable,我几乎可以肯定,当使用这种类型的新实例时,我将使用一个using语句.

当变量超出范围(例如在您的情况下,当从GetInternet方法返回时,上下文变量超出范围),其内存最终将被垃圾回收器回收,但这并不意味着任何本机处理程序(例如文件处理程序或数据库连接)将被关闭,这可能对您的应用程序造成非常严重的负面影响.

所以,考虑总是将一个IDisposable包装到使用结构中:

using (var context = new InternetDbContext())
{
  // Your code goes here
}

希望这可以帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读