| using Microsoft.Extensions.Caching.Memory; | 
| using Microsoft.Extensions.DependencyInjection; | 
| using SqlSugar; | 
| using StackExchange.Profiling; | 
| using System; | 
| using System.Collections.Generic; | 
| using System.Linq; | 
| using System.Text; | 
| using System.Threading.Tasks; | 
| using WIDESEA_Core.AOP; | 
| using WIDESEA_Core.DB; | 
| using WIDESEA_Core.Helper; | 
| using WIDESEA_Core.LogHelper; | 
| using WIDESEA_Core.Seed; | 
|   | 
| namespace WIDESEA_Core | 
| { | 
|     /// <summary> | 
|     /// SqlSugar 启动服务 | 
|     /// </summary> | 
|     public static class SqlsugarSetup | 
|     { | 
|         private static readonly MemoryCache Cache = new MemoryCache(new MemoryCacheOptions()); | 
|   | 
|         public static void AddSqlsugarSetup(this IServiceCollection services) | 
|         { | 
|             if (services == null) throw new ArgumentNullException(nameof(services)); | 
|   | 
|             // 默认添加主数据库连接 | 
|             //MainDb.CurrentDbConnId = AppSettings.app(new string[] { "MainDB" }); | 
|   | 
|             // SqlSugarScope是线程安全,可使用单例注入 | 
|             // 参考:https://www.donet5.com/Home/Doc?typeId=1181 | 
|             services.AddScoped<ISqlSugarClient>(o => | 
|             { | 
|                 var memoryCache = o.GetRequiredService<IMemoryCache>(); | 
|   | 
|                 // 连接字符串 | 
|                 var listConfig = new List<ConnectionConfig> | 
|                 { | 
|                     new ConnectionConfig | 
|                     { | 
|                         ConfigId = MainDb.CurrentDbConnId, | 
|                         ConnectionString = DBContext.GetMainConnectionDb().Connection, | 
|                         IsAutoCloseConnection = true, | 
|                         DbType = MainDb.DbType, | 
|                         AopEvents = new AopEvents | 
|                         { | 
|                             OnLogExecuting = (sql, p) => | 
|                             { | 
|                                   Parallel.For(0, 1, e => | 
|                                   { | 
|                                         MiniProfiler.Current.CustomTiming("SQL:", GetParas(p) + "【SQL语句】:" + sql); | 
|                                   }); | 
|                             } | 
|                         } | 
|                     } | 
|                 }; | 
|                 #region 从库 | 
|                 //var listConfig_Slave = new List<SlaveConnectionConfig>(); | 
|                 //BaseDBConfig.MutiConnectionString.ForEach(s => | 
|                 //{ | 
|                 //    if(s.ConnId != MainDb.CurrentDbConnId) | 
|                 //    { | 
|                 //        listConfig_Slave.Add(new SlaveConnectionConfig() | 
|                 //        { | 
|                 //            HitRate = s.HitRate, | 
|                 //            ConnectionString = s.Connection | 
|                 //        }); | 
|                 //    } | 
|   | 
|                 //}); | 
|   | 
|                 //BaseDBConfig.MutiConnectionString.ForEach(m => | 
|                 //{ | 
|                 //    listConfig.Add(new ConnectionConfig() | 
|                 //    { | 
|                 //        ConfigId = m.ConnId.ObjToString().ToLower(), | 
|                 //        ConnectionString = m.Connection, | 
|                 //        DbType = (DbType)m.DbType, | 
|                 //        IsAutoCloseConnection = true, | 
|                 //        MoreSettings = new ConnMoreSettings() | 
|                 //        { | 
|                 //            //IsWithNoLockQuery = true, | 
|                 //            IsAutoRemoveDataCache = true | 
|                 //        }, | 
|                 //        // 从库 | 
|                 //        //SlaveConnectionConfigs = listConfig_Slave, | 
|                 //        // 自定义特性 | 
|                 //        ConfigureExternalServices = new ConfigureExternalServices() | 
|                 //        { | 
|                 //            DataInfoCacheService = new SqlSugarMemoryCacheService(memoryCache), | 
|                 //            EntityService = (property, column) => | 
|                 //            { | 
|                 //                if (column.IsPrimarykey && property.PropertyType == typeof(int)) | 
|                 //                { | 
|                 //                    column.IsIdentity = true; | 
|                 //                } | 
|                 //            } | 
|                 //        }, | 
|                 //        InitKeyType = InitKeyType.Attribute, | 
|                 //        AopEvents = new AopEvents() | 
|                 //        { | 
|                 //            OnError = x => | 
|                 //            { | 
|                 //                Console.WriteLine(x.Sql); | 
|                 //            } | 
|                 //        } | 
|                 //    } | 
|                 //   ); | 
|                 //}); | 
|                 #endregion | 
|   | 
|                 SqlSugarClient sqlSugarClient = new SqlSugarClient(listConfig, db => | 
|                 { | 
|                     db.Aop.DataExecuting = SqlSugarAop.DataExecuting; | 
|                 }); | 
|                 return sqlSugarClient; | 
|             }); | 
|         } | 
|   | 
|         private static string GetWholeSql(SugarParameter[] paramArr, string sql) | 
|         { | 
|             foreach (var param in paramArr) | 
|             { | 
|                 sql.Replace(param.ParameterName, param.Value.ObjToString()); | 
|             } | 
|   | 
|             return sql; | 
|         } | 
|   | 
|         private static string GetParas(SugarParameter[] pars) | 
|         { | 
|             string key = "【SQL参数】:"; | 
|             foreach (var param in pars) | 
|             { | 
|                 key += $"{param.ParameterName}:{param.Value}\n"; | 
|             } | 
|   | 
|             return key; | 
|         } | 
|     } | 
| } |