using Logger; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ORM { public class SqlSugarContext { /// /// SqlSugarScope单例模式 /// public static readonly SqlSugarScope DbContext = new SqlSugarScope( new ConnectionConfig() { DbType = DatabaseConfig.DbConnectionType, ConnectionString = DatabaseConfig.DbConnectionString, // 连接符字串 //ConfigId = "Db1",//管理多个数据库 IsAutoCloseConnection = true, // 自动关闭连接 InitKeyType = InitKeyType.Attribute // 通过实体类上的特性初始化 }, db => { // 执行超时时间,单位秒 db.Ado.CommandTimeOut = 30; // 每次SQL执行前事件 db.Aop.OnLogExecuting = (sql, pars) => { #if DEBUG // 确保 SQL 只通过 sqlLogger 记录 LoggerHelper.sqlLogger.Info("Executing SQL: {0} with parameters: {1}", sql, pars); // 使用 NLog 记录 SQL #endif }; // SQL执行完 db.Aop.OnLogExecuted = (sql, pars) => { // 执行时间超过1秒记录慢日志 if (db.Ado.SqlExecutionTime.TotalSeconds > 1) { LoggerHelper.sqlLogger.Warn("SQL Slow Execution. Time: {0}, File: {1}, Line: {2}, Method: {3}, SQL: {4}", db.Ado.SqlExecutionTime.ToString(), // SQL 执行时间 db.Ado.SqlStackTrace.FirstFileName, // 代码 CS 文件名 db.Ado.SqlStackTrace.FirstLine, // 代码行数 db.Ado.SqlStackTrace.FirstMethodName, // 代码方法名 sql); // 使用 NLog 记录慢 SQL 日志 } }; // SQL 报错 db.Aop.OnError = (exp) => { // 确保 SQL 错误日志仅通过 sqlLogger 记录 LoggerHelper.sqlLogger.Error(exp, "SQL Error: {0}", exp.Sql); // 使用 NLog 记录 SQL 错误日志 }; // 数据过滤器:例如在新增数据时生成雪花 Id db.Aop.DataExecuting = (oldValue, entityInfo) => { // 新增操作 if (entityInfo.OperationType == DataFilterType.InsertByObject) { // 主键(long)赋值雪花 Id if (entityInfo.EntityColumnInfo.IsPrimarykey && entityInfo.EntityColumnInfo.PropertyInfo.PropertyType == typeof(long)) { var id = ((dynamic)entityInfo.EntityValue).Id; if (id == null || id == 0) { SnowFlakeSingle.WorkId = DatabaseConfig.SnowFlakeWorkId; SnowFlakeSingle.DatacenterId = DatabaseConfig.SnowFlakeDatacenterId; entityInfo.SetValue(SnowFlakeSingle.Instance.NextId()); } } } }; } ); } }