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