using Microsoft.Extensions.Options; using MyHomePage.Api.Infrastructure.Configuration; using SqlSugar; namespace MyHomePage.Api.Infrastructure.Database; /// /// SqlSugar 上下文(单例生命周期)。 /// 根据 自动切换 MySQL / SQLite。 /// public class SqlSugarContext : IDisposable { private readonly DatabaseOptions _options; public ISqlSugarClient Db { get; } public SqlSugarContext(IOptions options) { _options = options.Value; Db = new SqlSugarScope(BuildConnectionConfig(_options), BuildAopConfig()); } /// 根据配置构建 SqlSugar 连接配置 private static ConnectionConfig BuildConnectionConfig(DatabaseOptions options) { var dbType = options.Provider.Equals("MySql", StringComparison.OrdinalIgnoreCase) ? DbType.MySql : DbType.Sqlite; return new ConnectionConfig { ConfigId = "default", ConnectionString = options.ConnectionString, DbType = dbType, IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute, // SqlSugar AOP 启用默认值 MoreSettings = new ConnMoreSettings { IsAutoRemoveDataCache = true } }; } /// 配置 AOP:日志 + 性能监控 private static Action BuildAopConfig() => db => { db.Aop.OnLogExecuting = (sql, parameters) => { // 由 Serilog / 默认 logger 接管,避免在控制台双打 // 这里只做轻量占位,实际日志由 SqlSugarScopeClientConfiguration 注入的 logger 输出 }; }; public void Dispose() { Db?.Dispose(); GC.SuppressFinalize(this); } }