using SqlSugar; using Microsoft.Extensions.Configuration; namespace AssetManager.Data; public static class SqlSugarConfig { private static IConfiguration? _configuration; /// /// 初始化配置(在Program.cs中调用) /// public static void Initialize(IConfiguration configuration) { _configuration = configuration; } public static ISqlSugarClient GetSqlSugarClient() { if (_configuration == null) { throw new InvalidOperationException("SqlSugarConfig has not been initialized. Call Initialize() first."); } // 优先从环境变量读取连接字符串 var connectionString = Environment.GetEnvironmentVariable("ConnectionStrings__Default") ?? _configuration.GetConnectionString("Default") ?? throw new InvalidOperationException("Connection string 'Default' not found in environment variables or configuration."); // MySQL 连接池优化配置 // 添加连接池参数提高稳定性 if (!connectionString.Contains("Pooling=", StringComparison.OrdinalIgnoreCase)) { connectionString += ";Pooling=true"; } if (!connectionString.Contains("MaximumPoolSize=", StringComparison.OrdinalIgnoreCase)) { connectionString += ";MaximumPoolSize=100"; } if (!connectionString.Contains("MinimumPoolSize=", StringComparison.OrdinalIgnoreCase)) { connectionString += ";MinimumPoolSize=5"; } // 连接超时和生命周期 if (!connectionString.Contains("ConnectionTimeout=", StringComparison.OrdinalIgnoreCase)) { connectionString += ";ConnectionTimeout=30"; } // 连接空闲超时,避免使用长时间空闲的连接 if (!connectionString.Contains("ConnectionIdleTimeout=", StringComparison.OrdinalIgnoreCase)) { connectionString += ";ConnectionIdleTimeout=180"; } return new SqlSugarScope(new ConnectionConfig() { ConnectionString = connectionString, DbType = DbType.MySql, IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute, ConfigureExternalServices = new ConfigureExternalServices { EntityService = (property, column) => { if (property.PropertyType == typeof(DateTime)) { column.DataType = "datetime(3)"; } } } }); } }