Ejemplo n.º 1
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.º 2
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);
        }
Ejemplo n.º 3
0
 /// <summary>
 /// 手动设置数据库定位数据
 /// 用以在GetDbAccess手动判断
 /// </summary>
 /// <param name="obj"></param>
 public void SetDbLocationTag(object obj)
 {
     CallContext.SetData("SetDbLocationTag", obj);
     dbLocation.TagData = obj;
 }