using DS.Module.Core; using DS.Module.Core.Extensions; using DS.Module.UserModule; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using SqlSugar; namespace DS.Module.SqlSugar; /// /// SqlSugar 启动服务 /// public static class SqlsugarInstall { // /// // /// 数据库连接字符串 // /// // private static string DbInfo = AppSetting.Configuration["ConnectionStrings:DbInfo"]; // // /// // /// 数据库类型 // /// // private static string DbType = AppSetting.Configuration["ConnectionStrings:DbType"]; //public static readonly Logger Logger = LogManager.GetCurrentClassLogger(); // private readonly IUser user; // private ILogger _logger; /// /// 将模块服务添加到依赖注入服务容器中 /// /// 依赖注入服务容器 /// public static IServiceCollection AddSqlsugarInstall(this IServiceCollection services) { if (services == null) throw new ArgumentNullException(nameof(services)); Console.WriteLine("开始加载sqlsugar模块"); Console.WriteLine("数据库配置id:" + AppSetting.app(new string[] { "DBInfo", "DefaultDbConnId" })); var dbs = AppSetting.app("DBInfo", "DBS"); //默认数据库 List dbList = new List(); DbConfig defaultdb = new DbConfig() { ConnId = AppSetting.app(new string[] { "DBInfo", "DefaultDbConnId" }), Connection = AppSetting.app(new string[] { "DBInfo", "DefaultDbString" }), DbType = AppSetting.app(new string[] { "DBInfo", "DefaultDbType" }).ObjToInt() }; dbList.Add(defaultdb); //业务数据库集合 foreach (var item in dbs) { dbList.Add(item); } var connectConfigList = SqlsugarHelper.ReturnConnectionConfig(dbList); //foreach (var item in dbList) //{ // //防止数据库重复,导致的事务异常 // if (connectConfigList.Any(a => a.ConfigId == (dynamic)item.ConnId || a.ConnectionString == item.Connection)) // { // continue; // } // connectConfigList.Add(new ConnectionConfig() // { // ConnectionString = item.Connection, // DbType = (DbType)item.DbType, // IsAutoCloseConnection = true, // ConfigId = item.ConnId, // InitKeyType = InitKeyType.Attribute, // MoreSettings = new ConnMoreSettings() // { // IsAutoRemoveDataCache = true //自动清理缓存 // }, // // 自定义特性 // ConfigureExternalServices = new ConfigureExternalServices() // { // } // }); //} var user = services.GetService(); if (user.IsNullOrEmpty()) { var httpContextAccessor = services.GetService(); user = new AspNetUser(httpContextAccessor) { UserId = "1288018625843826688", TenantId = "1288018625843826688", CompanyId = "1288018625843826688", OrgId = "1288018625843826688" }; } //全局上下文生效 SqlSugarScope sqlSugar = new SqlSugarScope(connectConfigList, db => { // 封装AOP SqlsugarAopHelper.AopForSqlsugar(db, user, dbList, connectConfigList); ///* // * 默认只会配置到第一个数据库,这里按照官方文档进行多数据库/多租户文档的说明进行循环配置 // */ //foreach (var c in connectConfigList) //{ // var dbProvider = db.GetConnectionScope((string)c.ConfigId); // var user = services.GetService(); // //单例参数配置,所有上下文生效 // dbProvider.Ado.CommandTimeOut = 30; // dbProvider.Aop.OnLogExecuting = (sql, pars) => // { // Logger.Log(LogLevel.Info, // DateTime.Now.ToString() + "\r\n" + // UtilMethods.GetSqlString(c.DbType, sql, pars)); // }; // dbProvider.Aop.DataExecuting = (oldValue, entityInfo) => // { // // 新增操作 // SqlsugarHelper.InsertByObjectForSqlsugar(entityInfo, user); // // 更新操作 // SqlsugarHelper.UpdateByObjectForSqlsugar(entityInfo, user); // //if (entityInfo.OperationType == DataFilterType.InsertByObject) // //{ // // if (entityInfo.PropertyName == "Id") // // { // // if (entityInfo.EntityColumnInfo.PropertyInfo.PropertyType == typeof(string)) // // { // // entityInfo.SetValue(GuidHelper.GetSnowflakeId()); // // } // // if (entityInfo.EntityColumnInfo.PropertyInfo.PropertyType == typeof(long)) // // { // // entityInfo.SetValue(SnowFlakeSingle.Instance.NextId()); // // } // // } // // if (entityInfo.PropertyName == "CreateTime") // // entityInfo.SetValue(DateTime.Now); // // if (!user.UserId.IsNullOrEmpty()) // // { // // if (entityInfo.PropertyName == "TenantId") // // entityInfo.SetValue(user.GetTenantId()); // // } // // if (entityInfo.PropertyName == "CreateBy") // // { // // if (!user.UserId.IsNullOrEmpty()) // // { // // entityInfo.SetValue(user.UserId); // // } // // else // // { // // entityInfo.SetValue(1288018625843826688); // // } // // } // // if (entityInfo.PropertyName == "Deleted") // // entityInfo.SetValue(false); // //} // //if (entityInfo.OperationType == DataFilterType.UpdateByObject) // //{ // // if (entityInfo.PropertyName == "UpdateTime") // // entityInfo.SetValue(DateTime.Now); // // if (entityInfo.PropertyName == "UpdateBy" && user != null) // // entityInfo.SetValue(user.UserId); // //} // }; // dbProvider.Aop.OnError = (exp) => //执行SQL 错误事件 // { // Logger.Error(DateTime.Now.ToString() + "\r\n" + exp.Sql + "\r\n" + exp.Parametres); // }; // dbProvider.QueryFilter.AddTableFilter(m => m.TenantId == user.GetTenantId()); // //全局软删除过滤 // dbProvider.QueryFilter.AddTableFilter(m => m.Deleted == false); //} }); services.AddSingleton(sqlSugar); //这边是SqlSugarScope用AddSingleton return services; } }