Esempio n. 1
0
        internal override DbContextInner GetDbContext()
        {
            dbLocation.ManageName = ManageName;
            var helper    = DBConfigRegister.GetDBHelper(dbLocation);
            var dbContext = new DbContextInner(helper, dbLocation);

            return(dbContext);
        }
Esempio n. 2
0
        internal AbsDBExtend copyDBExtend()
        {
            var helper     = DBConfigRegister.GetDBHelper(dbContext.DBLocation);
            var dbContext2 = new DbContextInner(helper, dbContext.DBLocation);

            //dbContext2.ShardingMainDataIndex = dbContext.ShardingMainDataIndex;
            dbContext2.UseSharding = dbContext.UseSharding;
            return(DBExtendFactory.CreateDBExtend(dbContext2));
        }
        internal static DBAdapterBase GetDBAdapterBase(DbContextInner dbContext)
        {
            var configBuilder = instance;
            var exists        = configBuilder.DBAdapterBaseRegister.TryGetValue(dbContext.DBHelper.CurrentDBType, out var func);

            if (!exists)
            {
                throw new Exception("找不到对应的DBAdapte" + dbContext.DBHelper.CurrentDBType);
            }
            return(func(dbContext));
        }
Esempio n. 4
0
        /// <summary>
        /// 构造DBExtend
        /// </summary>
        /// <param name="_dbContext"></param>
        public AbsDBExtend(DbContextInner _dbContext)
        {
            dbContext = _dbContext;
            var _helper = _dbContext.DBHelper;

            if (_helper == null)
            {
                throw new Exception("数据访问对象未实例化,请实现CRL.SettingConfig.GetDbAccess");
            }
            GUID       = Guid.NewGuid();
            __DbHelper = _helper;
        }
Esempio n. 5
0
 public static string GetTableName(string tableName, DbContextInner dbContext)
 {
     if (dbContext != null && dbContext.UseSharding)
     {
         if (dbContext.DBLocation.ShardingLocation != null)
         {//没有设置定位,则找默认库
             var location = dbContext.DBLocation.ShardingLocation;
             tableName = location.TablePartName;
         }
     }
     return(tableName);
 }
        internal static AbsDBExtend CreateDBExtend(DbContextInner _dbContext)
        {
            var configBuilder = instance;
            var dbType        = _dbContext.DBHelper.CurrentDBType;

            if (_dbContext.DataBaseArchitecture == DataBaseArchitecture.Relation)
            {
                return(new DBExtend.RelationDB.DBExtend(_dbContext));
            }
            var a = configBuilder.AbsDBExtendRegister.TryGetValue(dbType, out Func <DbContextInner, AbsDBExtend> func);

            if (!a)
            {
                throw new Exception($"未找到AbsDBExtend {dbType}");
            }
            return(func(_dbContext));
        }
Esempio n. 7
0
        /// <summary>
        /// SQL语句转换为存储过程
        /// </summary>
        /// <param name="template"></param>
        /// <param name="dbContext"></param>
        /// <param name="sql"></param>
        /// <param name="procedureName"></param>
        /// <param name="templateParame"></param>
        /// <returns></returns>
        internal static string SqlToProcedure(string template, DbContextInner dbContext, string sql, string procedureName, Dictionary <string, string> templateParame = null)
        {
            var adpater = DBAdapter.DBAdapterBase.GetDBAdapterBase(dbContext);

            template = template.Trim();
            Regex         r = new Regex(@"\@(\w+)", RegexOptions.IgnoreCase);//like @parame
            Match         m;
            List <string> pars = new List <string>();

            for (m = r.Match(sql); m.Success; m = m.NextMatch())
            {
                string par = m.Groups[1].ToString();
                if (!pars.Contains(par))
                {
                    pars.Add(par);
                }
            }
            //string template = Properties.Resources.pageTemplate.Trim();
            sql      = sql.Replace("'", "''");//单引号过滤
            template = template.Replace("{name}", procedureName);
            template = template.Replace("{sql}", sql);
            string parames = "";

            //构造参数
            if (dbContext.DBHelper.Params != null)
            {
                foreach (var p in dbContext.DBHelper.Params)
                {
                    string key = p.Key.Replace("@", "");
                    var    t   = p.Value.GetType();
                    var    par = adpater.GetDBColumnType(t);
                    if (t == typeof(System.String))
                    {
                        par = string.Format(par, 500);
                    }
                    parames += adpater.SpParameFormat(key, par, false);
                }
            }
            if (dbContext.DBHelper.OutParams != null)
            {
                foreach (var p in dbContext.DBHelper.OutParams)
                {
                    string key = p.Key;
                    var    t   = p.Value.GetType();
                    var    par = adpater.GetDBColumnType(t);
                    parames += adpater.SpParameFormat(key, par, true);
                }
            }
            if (parames.Length > 0)
            {
                parames = "(" + parames.Substring(0, parames.Length - 1) + ")";
            }
            template = template.Replace("{parame}", parames);
            if (templateParame != null)
            {
                foreach (var item in templateParame)
                {
                    var value = item.Value;
                    value    = value.Replace("'", "''");//单引号过滤
                    template = template.Replace("{" + item.Key + "}", value);
                }
            }

            template = adpater.GetCreateSpScript(procedureName, template);
            return(template);
        }
 public static AbsDBExtend CreateDBExtend(DbContextInner _dbContext)
 {
     return(DBConfigRegister.CreateDBExtend(_dbContext));
 }
Esempio n. 9
0
        /// <summary>
        /// 根据类型返回表名
        /// 如果设置了分表,返回分表名
        /// </summary>
        /// <param name="type"></param>
        /// <param name="dbContext"></param>
        /// <returns></returns>
        public static string GetTableName(Type type, DbContextInner dbContext)
        {
            var tableName = GetTable(type).TableName;

            return(GetTableName(tableName, dbContext));
        }