using SqlSugar; using System; using System.Collections.Generic; using System.Dynamic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Core.Const; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_Core.Tenants; namespace WIDESEAWCS_Core.DB { public class BaseDBConfig { /* 之前的单库操作已经删除,如果想要之前的代码,可以查看我的GitHub的历史记录 * 目前是多库操作,默认加载的是appsettings.json设置为true的第一个db连接。 */ public static List 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 MutiInitConn() { SqlSugarScope sqlSugarClient = new SqlSugarScope(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 list = sqlSugarClient.Queryable(MainDb.TenantTableName, "x").Where(MainDb.TenantStatus, "=", TenantStatus.Enable).Select(TenantUtil.GetTenantSelectModels()).ToList(); List listdatabaseSlaveDB = new List(); 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 { /// /// 连接启用开关 /// public bool Enabled { get; set; } /// /// 连接ID /// public string ConnId { get; set; } /// /// 从库执行级别,越大越先执行 /// public int HitRate { get; set; } /// /// 连接字符串 /// public string Connection { get; set; } /// /// 数据库类型 /// public DataBaseType DbType { get; set; } } }