首页 » .NET » Entity Framework DbContext上下文管理(HttpContext.Current.Items集合)

Entity Framework DbContext上下文管理(HttpContext.Current.Items集合)

原文 http://blog.csdn.net/chwenbin/article/details/79110737

2018-01-20 02:00:26阅读(544)

 之前对DbContext对象的管理是实现会话唯一,但是会话不结束DbContext对象会一直被占用,也就导致数据库链接一直得不到释放,浪费资源。最近负责公司项目的后台项目架构,得到高手的指导,使用HttpContext.Current.Items集合存在DbContext对象,实现当一次请求来的时候创建DbContext对象(如果需要访问数据库),请求结束后立即释放(可以在Global.asax中添加Application_EndRequest事件及时释放)。

HttpContext.Current.Items集合:是一个键值对集合,在HttpContext生存期在共享,其生存期很短,就是一次请求,当请求结束就会被销毁。

<a href=Entity Framework DbContext上下文管理(HttpContext.Current.Items集合)" src="http://img.blog.csdn.net/20180119211654540?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2h3ZW5iaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

1.DbContextHelper类封装:

public class DbContextHelper
{
    /// <summary>
    /// 创建DBContext对象,并存放到HttpContext.Current.Items集合中。
    /// </summary>
    /// <returns></returns>
    public static T CreateDbContext<T>(string key) where T : class, new()
    {
        T context = HttpContext.Current.Items[key] as T;
        if (context == null)
        {
            context = new T();
            HttpContext.Current.Items.Add(key, context);
        }
        return context;
    }
    /// <summary>
    /// 释放DBContext对象
    /// </summary>
    public static void DisposeDbContext(string key)
    {
        if (HttpContext.Current.Items.Contains(key))
        {
            HttpContext.Current.Items.Remove(key);
        }
    }
}


2.请求结束及时释放:在HttpContext管道事件中最后一个发生。

   void Application_EndRequest(object sender, EventArgs e)
    {
        DbContextHelper.DisposeDbContext("contextKey");
    }


最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹