首页 > 编程语言 > 详细

EF上下文容器,保存线程唯一性

时间:2016-05-05 01:54:12      阅读:444      评论:0      收藏:0      [点我收藏+]

     在工作中有个疑问,就是EF上下文容器到底创建了多少个?

在asp.net中,EF上下文容器。如果只要有一个,则每次一个用户访问,添加一些实体,然后又不会自动销毁,就会造成内存爆炸。如果每次创建一个,则就出现一个实例调用混乱。在sp.net中,保证一个线程(一次http请求及一个管道事件),一个EF上下文容器就刚刚好,解决上面问题。

一个线程一个上下文容器,

解决方案1:线程缓存

技术分享
保证一个请求线程中只有一份EF容器
        protected BaseDbContext db
        {
            get
            {
                //向线程缓存中查询,如果返回的是null,则创建,同时存入到这个线程缓存中
                //注意的是线程缓存CallContext,而不是我们熟悉的HttpRuntime.cache
                object efDbContext = CallContext.GetData("BaseDbContext");
                if (efDbContext == null)
                {
                    efDbContext = new BaseDbContext();
                    //存入到这个线程缓存中
                    CallContext.SetData("BaseDbContext", efDbContext);
                }
                return efDbContext as BaseDbContext;
            }
        }
View Code

方案2:将上下文容器保存到httpContext.Current.Items["db"]中(httpContext也是每次请求创建一个,管道事件结束就销毁)

技术分享
public static class EFFactory
        {
            public static object GetCurrentEFContext()
            {
                if (HttpContext.Current.Items["EFContxt"]==null)
                {
                    HttpContext.Current.Items["EFContxt"]= new BaseDbContext();
                }
                return HttpContext.Current.Items["EFContxt"];
            }
        }
View Code

 

EF上下文容器,保存线程唯一性

原文:http://www.cnblogs.com/zhuyapeng/p/5460324.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!