using SqlSugar; 
 | 
using System; 
 | 
using System.Collections.Generic; 
 | 
using System.Dynamic; 
 | 
using System.Linq; 
 | 
using System.Text; 
 | 
using System.Threading.Tasks; 
 | 
using WIDESEA_Core.Const; 
 | 
using WIDESEA_Core.Helper; 
 | 
using WIDESEA_Core.Tenants; 
 | 
  
 | 
namespace WIDESEA_Core.DB 
 | 
{ 
 | 
    public class BaseDBConfig 
 | 
    { 
 | 
        /* 之前的单库操作已经删除,如果想要之前的代码,可以查看我的GitHub的历史记录 
 | 
         * 目前是多库操作,默认加载的是appsettings.json设置为true的第一个db连接。 
 | 
         */ 
 | 
        public static List<MutiDBOperate> MutiConnectionString => MutiInitConn(); 
 | 
  
 | 
        private static string DifDBConnOfSecurity(params string[] conn) 
 | 
        { 
 | 
            foreach (var item in conn) 
 | 
            { 
 | 
                try 
 | 
                { 
 | 
                    if (File.Exists(item)) 
 | 
                    { 
 | 
                        return File.ReadAllText(item).Trim(); 
 | 
                    } 
 | 
                } 
 | 
                catch (System.Exception) 
 | 
                { 
 | 
                } 
 | 
            } 
 | 
  
 | 
            return conn[conn.Length - 1]; 
 | 
        } 
 | 
  
 | 
        public static List<MutiDBOperate> MutiInitConn() 
 | 
        { 
 | 
            SqlSugarClient sqlSugarClient = new SqlSugarClient(new ConnectionConfig 
 | 
            { 
 | 
                ConfigId = MainDb.CurrentDbConnId, 
 | 
                ConnectionString = AppSettings.app(MainDb.ConnectionString).DecryptDES(AppSecret.DB), 
 | 
                IsAutoCloseConnection = true, 
 | 
                DbType = MainDb.DbType, 
 | 
                AopEvents = new AopEvents 
 | 
                { 
 | 
                    OnError = x => 
 | 
                    { 
 | 
                        Console.WriteLine(x.Sql); 
 | 
                    } 
 | 
                } 
 | 
            }); 
 | 
  
 | 
            List<ExpandoObject> list = sqlSugarClient.Queryable(MainDb.TenantTableName, "x").Where(MainDb.TenantStatus, "=", TenantStatus.Enable).Select(TenantUtil.GetTenantSelectModels()).ToList(); 
 | 
            List<MutiDBOperate> listdatabaseSlaveDB = new List<MutiDBOperate>(); 
 | 
            MutiDBOperate mainDb = new MutiDBOperate() 
 | 
            { 
 | 
                Connection = AppSettings.app(MainDb.ConnectionString).DecryptDES(AppSecret.DB), 
 | 
                ConnId = MainDb.CurrentDbConnId, 
 | 
                DbType = DataBaseType.SqlServer 
 | 
            }; 
 | 
            listdatabaseSlaveDB.Add(mainDb); 
 | 
            for (int i = 0; i < list.Count; i++) 
 | 
            { 
 | 
                dynamic data = list[i]; 
 | 
                MutiDBOperate mutiDBOperate = new MutiDBOperate() 
 | 
                { 
 | 
                    Connection = data.ConnectionString, 
 | 
                    ConnId = data.TenantId + "", 
 | 
                    DbType = (DataBaseType)data.DbType, 
 | 
                }; 
 | 
                mutiDBOperate.Connection = mutiDBOperate.Connection.DecryptDES(AppSecret.DB); 
 | 
                listdatabaseSlaveDB.Add(mutiDBOperate); 
 | 
            } 
 | 
  
 | 
            return listdatabaseSlaveDB; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public enum DataBaseType 
 | 
    { 
 | 
        MySql = 0, 
 | 
        SqlServer = 1, 
 | 
        Sqlite = 2, 
 | 
        Oracle = 3, 
 | 
        PostgreSQL = 4, 
 | 
        Dm = 5, 
 | 
        Kdbndp = 6, 
 | 
    } 
 | 
  
 | 
    public class MutiDBOperate 
 | 
    { 
 | 
        /// <summary> 
 | 
        /// 连接启用开关 
 | 
        /// </summary> 
 | 
        public bool Enabled { get; set; } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 连接ID 
 | 
        /// </summary> 
 | 
        public string ConnId { get; set; } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 从库执行级别,越大越先执行 
 | 
        /// </summary> 
 | 
        public int HitRate { get; set; } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 连接字符串 
 | 
        /// </summary> 
 | 
        public string Connection { get; set; } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 数据库类型 
 | 
        /// </summary> 
 | 
        public DataBaseType DbType { get; set; } 
 | 
    } 
 | 
} 
 |