86 lines
3.7 KiB
C#
86 lines
3.7 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// SqlSugarScope单例模式
|
|
/// </summary>
|
|
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());
|
|
}
|
|
}
|
|
}
|
|
};
|
|
}
|
|
);
|
|
}
|
|
}
|
|
|
|
|