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; 
 | 
        } 
 | 
    } 
 | 
} 
 |