示例#1
0
        /// <summary>
        /// 根据配置文件获取数据库类型,并返回对应的工厂接口
        /// </summary>
        /// <param name="obj">初始化参数,可为连接字符串或者DbContext</param>
        /// <returns></returns>
        public static IRepository GetRepository(Object obj = null, DatabaseType?dbType = null, string entityNamespace = null)
        {
            IRepository   res              = null;
            DatabaseType  _dbType          = GetDbType(dbType);
            Type          dbRepositoryType = Type.GetType("YK.DataRepository." + DbProviderFactoryHelper.DbTypeToDbTypeStr(_dbType) + "Repository");
            List <object> paramters        = new List <object>();

            void BuildParamters()
            {
                if (obj.IsNullOrEmpty())
                {
                    return;
                }

                if (obj is DbContext)
                {
                    paramters.Add(obj);
                    return;
                }
                else if (obj is string)
                {
                    paramters.Add(obj);
                    paramters.Add(entityNamespace);
                }
            }

            BuildParamters();
            res = _dbrepositoryContainer.Resolve <IRepository>(_dbType.ToString(), paramters.ToArray());
            return(res);
        }
示例#2
0
        /// <summary>
        /// 通过条件删除数据
        /// </summary>
        /// <typeparam name="T">实体类型</typeparam>
        /// <param name="condition">条件</param>
        public virtual void Delete_Sql <T>(Expression <Func <T, bool> > condition) where T : class, new()
        {
            var    objectQuery = GetObjectQueryFromDbQueryable(GetIQueryable <T>().Where(condition));
            string querySTr    = objectQuery.ToTraceString();
            string parttern    = "^SELECT.*?FROM.*?AS(.*?)WHERE.*?$";
            var    match       = Regex.Match(querySTr, parttern, RegexOptions.Singleline);
            string extent1     = match.Groups[1].ToString();

            parttern = "^SELECT.*?(FROM.*?AS.*?WHERE.*?$)";
            match    = Regex.Match(querySTr, parttern, RegexOptions.Singleline);
            string fromSql = match.Groups[1].ToString();

            string             deleteSql   = $"DELETE {extent1} {fromSql}";
            List <DbParameter> dbParamters = new List <DbParameter>();

            objectQuery.Parameters.ToList().ForEach(aParamter =>
            {
                var parameter           = DbProviderFactoryHelper.GetDbParameter(_dbType);
                parameter.ParameterName = aParamter.Name;
                parameter.Value         = aParamter.Value ?? DBNull.Value;

                dbParamters.Add(parameter);
            });

            ExecuteSql(deleteSql, dbParamters);
        }
        /// <summary>
        /// 通过Sql参数查询返回DataTable
        /// </summary>
        /// <param name="sql">Sql语句</param>
        /// <param name="parameters">查询参数</param>
        /// <returns></returns>
        public DataTable GetDataTableWithSql(string sql, List <DbParameter> parameters)
        {
            DbProviderFactory dbProviderFactory = DbProviderFactoryHelper.GetDbProviderFactory(_dbType);

            using (DbConnection conn = dbProviderFactory.CreateConnection())
            {
                conn.ConnectionString = _connectionString;
                if (conn.State != ConnectionState.Open)
                {
                    conn.Open();
                }

                using (DbCommand cmd = conn.CreateCommand())
                {
                    cmd.Connection     = conn;
                    cmd.CommandText    = sql;
                    cmd.CommandTimeout = 5 * 60;

                    if (parameters != null && parameters?.Count > 0)
                    {
                        cmd.Parameters.AddRange(parameters.ToArray());
                    }

                    DbDataAdapter adapter = dbProviderFactory.CreateDataAdapter();
                    adapter.SelectCommand = cmd;
                    DataSet table = new DataSet();
                    adapter.Fill(table);
                    cmd.Parameters.Clear();

                    return(table.Tables[0]);
                }
            }
        }
示例#4
0
        /// <summary>
        /// 获取
        /// </summary>
        /// <param name="conString"></param>
        /// <param name="dbType"></param>
        /// <returns></returns>
        internal static BaseDbContext GetDbContext([NotNull] string conString, DatabaseType dbType)
        {
            if (conString.IsNullOrEmpty())
            {
                throw new Exception("conString能为空");
            }
            var dbConnection = DbProviderFactoryHelper.GetDbConnection(conString, dbType);
            var model        = DbModelFactory.GetDbCompiledModel(conString, dbType);
            DbContextOptionsBuilder builder = new DbContextOptionsBuilder();

            switch (dbType)
            {
            case DatabaseType.SqlServer: builder.UseSqlServer(dbConnection, x => x.UseRowNumberForPaging()); break;

            case DatabaseType.MySql: builder.UseMySql(dbConnection); break;

            case DatabaseType.PostgreSql: builder.UseNpgsql(dbConnection); break;

            case DatabaseType.Oracle: builder.UseOracle(dbConnection, x => x.UseOracleSQLCompatibility("11")); break;

            default: throw new Exception("暂不支持该数据库!");
            }
            builder.EnableSensitiveDataLogging();
            builder.UseModel(model);
            builder.UseLoggerFactory(_loggerFactory);

            return(new BaseDbContext(builder.Options));
        }
示例#5
0
 public SugarRepository()
 {
     SugarDbContext.Init(DbProviderFactoryHelper.GetConnectionString(), (SqlSugar.DbType)DbProviderFactoryHelper.GetDBType());
     _context  = SugarDbContext.GetDbContext();
     _db       = _context.Db;
     _entityDb = _context.GetEntityDB <TEntity>(_db);
 }
        /// <summary>
        /// 根据配置文件获取数据库类型,并返回对应的工厂接口
        /// </summary>
        /// <param name="conString">链接字符串</param>
        /// <param name="dbType">数据库类型</param>
        /// <returns></returns>
        public static IRepository GetRepository(string conString = null, DatabaseType?dbType = null)
        {
            conString = conString.IsNullOrEmpty() ? GlobalSwitch.DefaultDbConName : conString;
            conString = DbProviderFactoryHelper.GetConStr(conString);
            dbType    = dbType.IsNullOrEmpty() ? GlobalSwitch.DatabaseType : dbType;
            Type dbRepositoryType = Type.GetType("Coldairarrow.DataRepository." + DbProviderFactoryHelper.DbTypeToDbTypeStr(dbType.Value) + "Repository");

            return(Activator.CreateInstance(dbRepositoryType, new object[] { conString }) as IRepository);
        }
示例#7
0
        /// <summary>
        /// 获取DbConnection
        /// </summary>
        /// <param name="conStr">连接名或字符串</param>
        /// <returns></returns>
        private static DbConnection GetDbConnection(string conStr, DatabaseType dbType)
        {
            if (conStr.IsNullOrEmpty())
            {
                conStr = GlobalSwitch.DefaultDbConName;
            }
            DbConnection dbConnection = DbProviderFactoryHelper.GetDbConnection(dbType);

            dbConnection.ConnectionString = DbProviderFactoryHelper.GetConStr(conStr);

            return(dbConnection);
        }
示例#8
0
        private void RefreshDb()
        {
            var oldDb           = _db;
            var con             = DbProviderFactoryHelper.GetDbConnection(_conString, _dbType);
            var dBCompiledModel = DbModelFactory.GetDbCompiledModel(_conString, _dbType);

            _db = new BaseDbContext(con, dBCompiledModel);
            if (oldDb != null)
            {
                _db.Database.Log += oldDb.Database.Log;
            }
        }
        public void RefreshDb()
        {
            //重用DbConnection,使用底层相同的DbConnection,支持Model持热更新
            DbConnection con = null;

            if (_transaction != null)
            {
                con = _transaction.Connection;
            }
            else
            {
                con = _db?.Database?.GetDbConnection() ?? DbProviderFactoryHelper.GetDbConnection(_conString, _dbType);
            }

            var dBCompiledModel = DbModelFactory.GetDbCompiledModel(_conString, _dbType);

            _db = new BaseDbContext(_dbType, con, dBCompiledModel);
            _db.Database.UseTransaction(_transaction);
            disposedValue = false;
        }
        /// <summary>
        /// 根据配置文件获取数据库类型,并返回对应的工厂接口
        /// </summary>
        /// <param name="conString">链接字符串</param>
        /// <param name="dbType">数据库类型</param>
        /// <returns></returns>
        public static IRepository GetRepository(string conString = null, DatabaseType?dbType = null)
        {
            conString = conString.IsNullOrEmpty() ? GlobalSwitch.DefaultDbConName : conString;
            conString = DbProviderFactoryHelper.GetConStr(conString);
            dbType    = dbType.IsNullOrEmpty() ? GlobalSwitch.DatabaseType : dbType;
            Type dbRepositoryType = Type.GetType("Coldairarrow.DataRepository." + DbProviderFactoryHelper.DbTypeToDbTypeStr(dbType.Value) + "Repository");

            var repository = Activator.CreateInstance(dbRepositoryType, new object[] { conString }) as IRepository;

            //请求结束自动释放
            try
            {
                AutofacHelper.GetScopeService <IDisposableContainer>().AddDisposableObj(repository);
            }
            catch
            {
            }

            return(repository);
        }
示例#11
0
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (_nameOrConStr.IsNullOrEmpty())
            {
                _nameOrConStr = GlobalSwitch.DefaultDbConName;
            }

            string conStr = DbProviderFactoryHelper.GetConStr(_nameOrConStr);

            switch (_dbType)
            {
            case DatabaseType.SqlServer: optionsBuilder.UseSqlServer(_nameOrConStr).EnableSensitiveDataLogging(); break;

            case DatabaseType.MySql: optionsBuilder.UseMySQL(_nameOrConStr); break;

            default: throw new Exception("暂不支持该数据库!");
            }

            optionsBuilder.UseLoggerFactory(_loger);
        }
示例#12
0
        /// <summary>
        /// 根据配置文件获取数据库类型,并返回对应的工厂接口
        /// </summary>
        /// <param name="conString">链接字符串</param>
        /// <param name="dbType">数据库类型</param>
        /// <returns></returns>
        public static IRepository GetRepository(string conString, DatabaseType?dbType)
        {
            //conString = conString.IsNullOrEmpty() ? "sql" : conString;
            //conString = DbProviderFactoryHelper.GetConStr(conString);
            dbType = dbType.IsNullOrEmpty() ?  DatabaseType.SqlServer : dbType;

            Type dbRepositoryType = Type.GetType("Andy.Mes.Persistence." + DbProviderFactoryHelper.DbTypeToDbTypeStr(dbType.Value) + "Repository");

            var repository = Activator.CreateInstance(dbRepositoryType, new object[] { conString }) as IRepository;

            //请求结束自动释放
            try
            {
                //AutofacHelper.GetScopeService<IDisposableContainer>().AddDisposableObj(repository);
            }
            catch
            {
            }

            return(repository);
        }
示例#13
0
        private static DbCompiledModelInfo BuildDbCompiledModelInfo(string nameOrConStr, DatabaseType dbType)
        {
            lock (_buildCompiledModelLock)
            {
                DbConnection   connection   = DbProviderFactoryHelper.GetDbConnection(nameOrConStr, dbType);
                DbModelBuilder modelBuilder = new DbModelBuilder(DbModelBuilderVersion.Latest);
                modelBuilder.HasDefaultSchema(GetSchema());
                var entityMethod = typeof(DbModelBuilder).GetMethod("Entity");
                _modelTypeMap.Values.ToList().ForEach(aModel =>
                {
                    entityMethod.MakeGenericMethod(aModel).Invoke(modelBuilder, null);
                });
                var theModel             = modelBuilder.Build(connection).Compile();
                DbCompiledModelInfo info = new DbCompiledModelInfo
                {
                    ConStr          = connection.ConnectionString,
                    DatabaseType    = dbType,
                    DbCompiledModel = theModel
                };

                return(info);

                string GetSchema()
                {
                    switch (dbType)
                    {
                    case DatabaseType.SqlServer: return("dbo");

                    case DatabaseType.MySql:
                    case DatabaseType.PostgreSql: return("public");

                    case DatabaseType.Oracle: return(new OracleConnectionStringBuilder(connection.ConnectionString).UserID);;

                    default: return("dbo");
                    }
                }
            }
        }
        /// <summary>
        /// 获取指定的数据库帮助类
        /// </summary>
        /// <param name="dbType">数据库类型字符串</param>
        /// <param name="conStr">连接字符串</param>
        /// <returns></returns>
        public static DbHelper GetDbHelper(string dbTypeStr, string conStr)
        {
            DatabaseType dbType = DbProviderFactoryHelper.DbTypeStrToDbType(dbTypeStr);

            return(GetDbHelper(dbType, conStr));
        }