Ejemplo n.º 1
0
Archivo: Base.cs Proyecto: zmk523/CRL3
        public static Dictionary <int, SqlInfo> GetSQLRunningtime(out bool useContext)
        {
            var    list = new Dictionary <int, SqlInfo>();
            string key  = CallContext.GetData <string>(ContextUrlName);

            if (string.IsNullOrEmpty(key))
            {
                useContext = false;
                return(list);
            }
            var a = allSqlCache.TryGetValue(key, out list);

            if (list == null)
            {
                list = new Dictionary <int, SqlInfo>();
                allSqlCache.TryAdd(key, list);
            }
            useContext = true;
            return(list);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 数据访问对象[基本方法]
        /// 按指定的类型
        /// </summary>
        /// <returns></returns>
        protected AbsDBExtend GetDBExtend()
        {
            AbsDBExtend db             = null;
            string      contextName    = GetType().Name;//同一线程调用只创建一次
            var         _useCRLContext = CallContext.GetData <bool>(Base.UseCRLContextFlagName);

            if (_useCRLContext)//对于数据库事务,只创建一个上下文
            {
                //todo 由于内置缓存问题,参数不能一直变化,不然生成重复缓存和重复存储过程
                contextName = Base.CRLContextName;
                db          = CallContext.GetData <AbsDBExtend>(contextName);
                if (db != null)
                {
                    return(db);
                }
            }

            var dbContext2 = GetDbContext();

            if (_useCRLContext)//使用CRLContext,需由CRLContext来关闭数据连接
            {
                dbContext2.DBHelper.AutoCloseConn = false;
            }
            db = DBExtendFactory.CreateDBExtend(dbContext2);
            if (dbLocation.ShardingDataBase == null)
            {
                db.OnUpdateNotifyCacheServer = OnUpdateNotifyCacheServer;
            }
            if (_useCRLContext)
            {
                CallContext.SetData(contextName, db);
            }
            //占用内存..
            var allList = Base.GetCallDBContext();

            allList.Add(contextName);
            return(db);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 数据访问对象[基本方法]
        /// 按指定的类型
        /// </summary>
        /// <returns></returns>
        protected AbsDBExtend GetDBExtend(bool cache = true)
        {
            AbsDBExtend db          = null;
            string      contextName = "DBExtend." + GetType().Name;//同一线程调用只创建一次

            var _useCRLContext = CallContext.GetData <bool>(Base.UseCRLContextFlagName);

            if (_useCRLContext)//对于数据库事务,只创建一个上下文
            {
                contextName = Base.CRLContextName;
            }
            db = CallContext.GetData <AbsDBExtend>(contextName);
            if (db != null)
            {
                return(db);
            }
            var dbContext2 = GetDbContext();

            if (_useCRLContext)//使用CRLContext,需由CRLContext来关闭数据连接
            {
                dbContext2.DBHelper.AutoCloseConn = false;
            }
            db = DBExtendFactory.CreateDBExtend(dbContext2);
            if (dbLocation.ShardingDataBase == null)
            {
                db.OnUpdateNotifyCacheServer = OnUpdateNotifyCacheServer;
            }
            if (cache)
            {
                var allKey  = "AllDBExtend";
                var allList = Base.GetCallDBContext();
                CallContext.SetData(contextName, db);
                allList.Add(contextName);
                CallContext.SetData(allKey, allList);
            }
            return(db);
        }