using KH.WMS.Core.Constants; using KH.WMS.Core.Database.UnitOfWorks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using SqlSugar; using StackExchange.Profiling; namespace KH.WMS.Core.Database.SqlSugar; /// /// SQL Sugar 配置 /// public static class SqlSugarSetup { /// /// 添加 SQL Sugar 服务 /// public static IServiceCollection AddSqlSugar(this IServiceCollection services, IConfiguration configuration) { services.Configure(configuration.GetSection(AppSettingsConstants.DbConnection)); Console.WriteLine("SqlSugar 正在初始化数据库连接..."); services.AddSingleton(provider => { var options = provider.GetRequiredService>().Value; var logger = provider.GetService>(); var config = new ConnectionConfig { ConnectionString = options.ConnectionString, DbType = GetDbType(options.DbType), IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute, AopEvents = new AopEvents { OnLogExecuting = (sql, pars) => { var paramStr = string.Join(", ", pars.Select(p => $"{p.ParameterName}={p.Value}")); Parallel.For(0, 1, e => { MiniProfiler.Current.CustomTiming("SQL:", paramStr + "【SQL语句】:" + sql); }); // 使用 Verbose 级别记录每一行 SQL 执行 if (options.EnableSqlLog && logger != null) { logger.LogTrace("[SQL执行] {Sql} | 参数: {Params}", sql, paramStr); } // 开发环境同时输出到控制台 if (options.EnableSqlLog) { Console.WriteLine($"SQL: {sql}\nPARAMS: {paramStr}"); } } }, }; // 开发环境打印SQL if (options.EnableSqlLog) { config.ConfigureExternalServices = new ConfigureExternalServices { //SqlFuncServices = new SqlFuncExternalService(), EntityService = null, //DataInfoCacheService = }; } return new SqlSugarClient(config); }); //services.AddScoped(); //services.AddScoped(); return services; } private static DbType GetDbType(string dbType) { return dbType.ToLower() switch { AppSettingsConstants.DbType_MySql => DbType.MySql, AppSettingsConstants.DbType_SqlServer => DbType.SqlServer, AppSettingsConstants.DbType_PostgreSql => DbType.PostgreSQL, AppSettingsConstants.DbType_Oracle => DbType.Oracle, AppSettingsConstants.DbType_Sqlite => DbType.Sqlite, _ => DbType.SqlServer }; } } /// /// 数据库配置选项 /// public class DatabaseOptions { /// /// 连接字符串 /// public string ConnectionString { get; set; } = string.Empty; /// /// 数据库类型 /// public string DbType { get; set; } = AppSettingsConstants.DbType_SqlServer; /// /// 是否启用SQL日志 /// public bool EnableSqlLog { get; set; } = true; /// /// 命令超时时间(秒) /// public int CommandTimeout { get; set; } = 30; }