zoukankan      html  css  js  c++  java
  • EF上下文对象创建之线程内唯一

    在一次请求中,即一个线程内,若是用到EF数据上下文对象,就创建一个,那么会造成数据混乱,每次创建的对象执行相应的数据库操作,此同时,其他的EF对象内获得的数据可能已经是“过期”的了。即这个数据已经变动过。这就是数据混乱,为了解决这个问题,关键就是对象的创建问题。

    这里首先想到单例模式,不过在这里,不适合用,原因是使用单例模式,会使EF对象得不到及时的资源释放。

    第二种方式即保证在线程内对象唯一,如何保证呢,通过微软ASP机制的HttpContext对象,这个对象在线程中是唯一的,所以我们在HttpContext中创建或者说添加一个对象,即把我们要创建的EF数据上下文对象添加到HttpContext中。

    如何添加呢,可以在工具类(Common.cs)中添加这个个方法去创建

      /// <summary>
        /// 用来创建EF上下文对象,且保证线程内唯一。
        /// </summary>
        public class DbContextFactory
        {
            //DbContext在System.Data.Entity;中,不过这里直接只引用这一个不行,还有EF其他的一些NameSpace所以直接添加一个实体模型,所有引用都进来了,然后再把模型删了
            public static DbContext CreateDbContext()
            {
                DbContext dbContext = (DbContext)CallContext.GetData("dbContext");
                if (dbContext == null)
                {
                    dbContext = new HuaGongWebEntities();//Model中的实体模型的EF上下文实例
                    CallContext.SetData("dbContext", dbContext);
                }
                return dbContext;
            }
        }
  • 相关阅读:
    平方分割poj2104K-th Number
    平方分割poj2104K-th Number
    GIT学习之路第五天 分支管理
    GIT学习之路第五天 分支管理
    daily_journal_2 神奇的一天
    daily_journal_2 神奇的一天
    51nod1264 线段相交
    51nod1264 线段相交
    51nod1265判断四点共面
    51nod1265判断四点共面
  • 原文地址:https://www.cnblogs.com/joeymary/p/5146355.html
Copyright © 2011-2022 走看看