using Microsoft.Extensions.Configuration; using QYZH.InteractiveMagazine.Models.Entity; using SqlSugar; namespace QYZH.InteractiveMagazine.Repository; /// /// SqlSugar 数据库上下文封装(静态类) /// public static class SqlSugarDbContext { /// /// SqlSugarClient 实例 /// private static SqlSugarClient? _db; /// /// 配置对象 /// private static IConfiguration? _configuration; /// /// 初始化数据库上下文(在应用启动时调用一次) /// /// 配置对象 public static void Init(IConfiguration configuration) { _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); } /// /// 获取 SqlSugarClient 实例 /// /// SqlSugarClient 实例 public static SqlSugarClient GetDb() { if (_configuration == null) { throw new InvalidOperationException("请先调用 SqlSugarDbContext.Init(configuration) 进行初始化"); } if (_db == null) { lock (typeof(SqlSugarDbContext)) { if (_db == null) { var connectionString = _configuration.GetConnectionString("DefaultConnection"); if (string.IsNullOrWhiteSpace(connectionString)) { throw new InvalidOperationException("未找到连接字符串 DefaultConnection"); } _db = new SqlSugarClient(new ConnectionConfig { ConnectionString = connectionString, DbType = DbType.MySql, IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute }, db => { // 配置软删除全局过滤(继承 BaseEntity 的实体都有效) db.QueryFilter.AddTableFilter(it => it.IsDeleted == false); // 开启日志打印 db.Aop.OnLogExecuting = (sql, pars) => { Console.WriteLine($"[SQL执行] {DateTime.Now:yyyy-MM-dd HH:mm:ss}"); Console.WriteLine($"[SQL语句] {sql}"); Console.WriteLine($"[SQL参数] {string.Join(", ", pars.Select(p => $"{p.ParameterName}={p.Value}"))}"); Console.WriteLine(new string('-', 50)); }; }); } } } return _db; } /// /// 代码优先初始化(可选) /// /// 实体类型数组 public static void InitializeCodeFirst(params Type[] entityTypes) { var db = GetDb(); // 创建数据库(如果不存在) db.DbMaintenance.CreateDatabase(); // 初始化表结构 if (entityTypes != null && entityTypes.Length > 0) { db.CodeFirst.InitTables(entityTypes); } } }