using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using SqlSugar; using SqlSugar.IOC; namespace WMS.BZSqlSugar { public static class DbExtension { /// /// 初始化db /// /// /// /// public static void AddSqlSugarDb(this IServiceCollection services, IConfiguration Configuration, IWebHostEnvironment environment) { var lists = Util.ConfigHelper.GetConnectionConfigs().Connections; var iocList = new List(); foreach (var item in lists) { iocList.Add(new IocConfig() { ConfigId = item.ConfigId, ConnectionString = item.ConnectionString, DbType = (IocDbType)item.DataBaseType, IsAutoCloseConnection = item.IsAutoCloseConn }); } SugarIocServices.AddSqlSugar(iocList); ICacheService cache = new SqlSugarCache(); SugarIocServices.ConfigurationSugar(db => { iocList.ForEach(iocConfig => { SetSugarAop(db, iocConfig, cache); }); }); } public static void AddQuestDBSqlSugarDb(this IServiceCollection services, IConfiguration Configuration, IWebHostEnvironment environment) { var lists = Util.ConfigHelper.GetQuestDBConnectionConfigs().Connections; var iocList = new List(); foreach (var item in lists) { iocList.Add(new IocConfig() { ConfigId = item.ConfigId, ConnectionString = item.ConnectionString, DbType = (IocDbType)item.DataBaseType, IsAutoCloseConnection = item.IsAutoCloseConn }); } SugarIocServices.AddSqlSugar(iocList); ICacheService cache = new SqlSugarCache(); SugarIocServices.ConfigurationSugar(db => { iocList.ForEach(iocConfig => { SetQuestDBSugarAop(db, iocConfig, cache); }); }); } /// /// 数据库Aop设置 /// /// /// /// private static void SetSugarAop(SqlSugarClient db, IocConfig iocConfig, ICacheService cache) { var config = db.GetConnectionScope(iocConfig.ConfigId).CurrentConnectionConfig; string configId = config.ConfigId; db.GetConnectionScope(configId).Aop.OnLogExecuting = (sql, pars) => { string log = $"【db{configId} SQL语句】{UtilMethods.GetSqlString(config.DbType, sql, pars)}\n"; if (sql.TrimStart().StartsWith("SELECT", StringComparison.OrdinalIgnoreCase)) { Console.WriteLine(log); } else if (sql.StartsWith("UPDATE", StringComparison.OrdinalIgnoreCase) || sql.StartsWith("INSERT", StringComparison.OrdinalIgnoreCase)) { Console.WriteLine(log); } else if (sql.StartsWith("DELETE", StringComparison.OrdinalIgnoreCase) || sql.StartsWith("TRUNCATE", StringComparison.OrdinalIgnoreCase)) { Console.WriteLine(log); } else { log = $"【db{configId} SQL语句】dbo.{sql} {string.Join(", ", pars.Select(x => x.ParameterName + " = " + GetParsValue(x)))};\n"; Console.WriteLine(log); } }; db.GetConnectionScope(configId).Aop.OnError = (ex) => { //var pars = db.Utilities.SerializeObject(((SugarParameter[])ex.Parametres).ToDictionary(it => it.ParameterName, it => it.Value)); string sql = "【错误SQL】" + UtilMethods.GetSqlString(config.DbType, ex.Sql, (SugarParameter[])ex.Parametres) + "\r\n"; Console.WriteLine( $"\"【错误SQL】\"{sql}\r\n{ex.Message}\r\n{ex.StackTrace}"); }; db.GetConnectionScope(configId).Aop.DataExecuting = (oldValue, entiyInfo) => { }; db.GetConnectionScope(configId).CurrentConnectionConfig.MoreSettings = new ConnMoreSettings() { IsAutoRemoveDataCache = true }; } private static void SetQuestDBSugarAop(SqlSugarClient db, IocConfig iocConfig, ICacheService cache) { var config = db.GetConnectionScope(iocConfig.ConfigId).CurrentConnectionConfig; string configId = config.ConfigId; db.GetConnectionScope(configId).Aop.OnLogExecuting = (sql, pars) => { string log = $"【db{configId} SQL语句】{UtilMethods.GetSqlString(config.DbType, sql, pars)}\n"; if (sql.TrimStart().StartsWith("SELECT", StringComparison.OrdinalIgnoreCase)) { Console.WriteLine(log); } else if (sql.StartsWith("UPDATE", StringComparison.OrdinalIgnoreCase) || sql.StartsWith("INSERT", StringComparison.OrdinalIgnoreCase)) { Console.WriteLine(log); } else if (sql.StartsWith("DELETE", StringComparison.OrdinalIgnoreCase) || sql.StartsWith("TRUNCATE", StringComparison.OrdinalIgnoreCase)) { Console.WriteLine(log); } else { log = $"【db{configId} SQL语句】dbo.{sql} {string.Join(", ", pars.Select(x => x.ParameterName + " = " + GetParsValue(x)))};\n"; Console.WriteLine(log); } }; db.GetConnectionScope(configId).Aop.OnError = (ex) => { //var pars = db.Utilities.SerializeObject(((SugarParameter[])ex.Parametres).ToDictionary(it => it.ParameterName, it => it.Value)); string sql = "【错误SQL】" + UtilMethods.GetSqlString(config.DbType, ex.Sql, (SugarParameter[])ex.Parametres) + "\r\n"; Console.WriteLine($"\"【错误SQL】\"{sql}\r\n{ex.Message}\r\n{ex.StackTrace}"); }; db.GetConnectionScope(configId).Aop.DataExecuting = (oldValue, entiyInfo) => { }; db.GetConnectionScope(configId).CurrentConnectionConfig.MoreSettings = new ConnMoreSettings() { IsAutoRemoveDataCache = true }; } private static object GetParsValue(SugarParameter x) { if (x.DbType == System.Data.DbType.String || x.DbType == System.Data.DbType.DateTime || x.DbType == System.Data.DbType.String) { return "'" + x.Value + "'"; } return x.Value; } } }