using Microsoft.Extensions.DependencyInjection; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using VolPro.Core.Configuration; using VolPro.Core.Const; using VolPro.Core.DBManager; using VolPro.Core.EFDbContext; using VolPro.Core.Enums; using VolPro.Core.Extensions; using VolPro.Core.Extensions.AutofacManager; using VolPro.Core.ManageUser; using VolPro.Core.Utilities; using VolPro.Entity; namespace VolPro.Core.DbSqlSugar { public class DbManger { /// /// 获取业务库对象(租户动态分库) /// public static ISqlSugarClient ServiceDb { get { var configId = UserContext.CurrentServiceId; if (!Db.IsAnyConnection(configId)) { //用非默认ConfigId进行测试 Db.AddConnection(new ConnectionConfig() { ConfigId = configId, ConnectionString = DBServerProvider.ServiceConnectingString, // //2024.01.22增加分库使用不同类型的数据库 DbType = SqlSugarDbType.GetType(typeof(ServiceDbContext).Name),// SqlSugar.DbType.SqlServer, IsAutoCloseConnection = true, //https://www.donet5.com/Home/Doc?typeId=1182 ConfigureExternalServices = new ConfigureExternalServices() { EntityService = (property, column) => { if (GetDbType() == DbType.Dm) { var attributes = property.GetCustomAttributes(true);//get all attributes column.DbColumnName = column.DbColumnName.ToUpper(); } } } }); } var result = Db.GetConnection(configId); return result; } } /// /// 动态租户分库,获取指定数据库id的链接(2023.11.05) /// public static ISqlSugarClient GetServiceDb(Guid serviceId) { string configId = serviceId.ToString(); if (!Db.IsAnyConnection(configId)) { //用非默认ConfigId进行测试 Db.AddConnection(new ConnectionConfig() { ConfigId = configId, ConnectionString = DBServerProvider.GetServiceConnectingString(serviceId), DbType = SqlSugarDbType.GetType(typeof(ServiceDbContext).Name),// SqlSugar.DbType.SqlServer, IsAutoCloseConnection = true, //https://www.donet5.com/Home/Doc?typeId=1182 ConfigureExternalServices = new ConfigureExternalServices() { EntityService = (property, column) => { if (GetDbType() == DbType.Dm) { //var attributes = property.GetCustomAttributes(true);//get all attributes column.DbColumnName = property.Name.ToUpper();// column.DbColumnName.ToUpper(); } } } }); } var result = Db.GetConnection(configId); return result; } /// /// 获取系统库:后台异步使用 /// public static SqlSugarScope SysDbContext = new SqlSugarScope( SqlSugarRegister.GetSysConnectionConfig(), db => { db.Aop.OnLogExecuting = (sql, pars) => { Console.WriteLine(sql);//输出sql,查看执行sql 性能无影响 }; }); /// /// 根据dbcontext获取链接, /// /// /// ///获取系统库 DbManger.GetSqlSugarClient(typeof(SysDbContext).Name) ///获取业务库 DbManger.GetSqlSugarClient(typeof(ServiceDbContext).Name) /// /// public static ISqlSugarClient GetSqlSugarClient(string dbContextName = null) { return GetConnection(dbContextName); } public static ISqlSugarClient GetConnection(string dbContextName) { if (string.IsNullOrEmpty(dbContextName) || typeof(SysDbContext).Name == dbContextName) { return SysDbContext; } else if (typeof(ServiceDbContext).Name == dbContextName && AppSetting.UseDynamicShareDB) { return ServiceDb; } //其他配置文件里面的自定义数据库链接名称 return Db.GetConnection(dbContextName); } public static SqlSugarScope Db { get { var obj = AutofacContainerModule.GetService(); return (SqlSugarScope)obj; } } public static DbType GetDbType() { return SqlSugarDbType.GetType(); } /// /// 根据model获取指定dbcontext对象2023.12.17 /// /// /// public static BaseDbContext GetDbContext() { string dbServer = typeof(TEntity).GetTypeCustomValue(x => x.DBServer); return HttpContext.Current.RequestServices.GetService(DbRelativeCache.GetDbContextType(dbServer)) as BaseDbContext; } } }