sqlsugar 配置

This commit is contained in:
qianhao.xu 2024-08-01 10:55:51 +08:00
parent 58b21eba1c
commit 95bb35a7ec
5 changed files with 65 additions and 7 deletions

View File

@ -97,10 +97,11 @@ builder.Services.AddSwaggerConfig();
builder.Services.AddDirectoryBrowser();
var app = builder.Build();
//全局配置
InternalApp.ServiceProvider = app.Services;
InternalApp.Configuration = builder.Configuration;
InternalApp.WebHostEnvironment = app.Environment;
//初始化db sqlsugar
//初始化db 配置sqlsugar 然后注入IOC容器然后AOP配置
builder.Services.AddDb(app.Environment);
//使用全局异常中间件

View File

@ -14,6 +14,14 @@
"DbType": 0, // MySql = 0, SqlServer = 1, Oracle = 3PgSql = 4
"ConfigId": "0", //
"IsAutoCloseConnection": true
},
{
//"Conn": "Data Source=139.224.232.211;User ID=root;Password=doantech123;Initial Catalog=GXAssembly;Port=3308",
// "Conn": "Data Source=127.0.0.1;User ID=root;Password=123456;Initial Catalog=GXAssembly;Port=3306",
"Conn": "Data Source=192.168.0.58;User ID=root;Password=123456;Initial Catalog=GXAssembly;Port=3306",
"DbType": 0, // MySql = 0, SqlServer = 1, Oracle = 3PgSql = 4
"ConfigId": "1", //
"IsAutoCloseConnection": true
}
//...
],

View File

@ -30,7 +30,7 @@ namespace DOAN.Repository
public BaseRepository(ISqlSugarClient context = null) : base(context)
{
//通过特性拿到ConfigId
// C# 中使用反射来获取一个类型 (T) 上定义的自定义属性 (TenantAttribute) 的值。
//这个方法会查找应用在类型 T 上的 TenantAttribute 自定义属性。如果找到了该属性,它将返回该属性的实例;如果没有找到
var configId = typeof(T).GetCustomAttribute<TenantAttribute>()?.configId;
if (configId != null)
{

View File

@ -15,7 +15,8 @@ namespace DOAN.ServiceCore.SqlSugar
/// </summary>
public static void InitDb()
{
var db = DbScoped.SugarScope;
var db = DbScoped.SugarScope.GetConnection(0);
//建库:如果不存在创建数据库存在不会重复创建
db.DbMaintenance.CreateDatabase();// 注意 Oracle和个别国产库需不支持该方法需要手动建库

View File

@ -22,6 +22,7 @@ namespace DOAN.ServiceCore.SqlSugar
var options = App.OptionsSetting;
List<DbConfigs> dbConfigs = options.DbConfigs;
// 数据库连接配置
var iocList = new List<IocConfig>();
foreach (var item in dbConfigs)
{
@ -33,8 +34,11 @@ namespace DOAN.ServiceCore.SqlSugar
IsAutoCloseConnection = item.IsAutoCloseConnection
});
}
//SqlSugar.IOC 配置注入容器
SugarIocServices.AddSqlSugar(iocList);
ICacheService cache = new SqlSugarCache();
// 配置参数
SugarIocServices.ConfigurationSugar(db =>
{
var u = App.User;
@ -47,6 +51,7 @@ namespace DOAN.ServiceCore.SqlSugar
iocList.ForEach(iocConfig =>
{
//数据库Aop设置
SetSugarAop(db, iocConfig, cache);
});
});
@ -68,30 +73,69 @@ namespace DOAN.ServiceCore.SqlSugar
var config = db.GetConnectionScope(iocConfig.ConfigId).CurrentConnectionConfig;
var showDbLog = AppSettings.Get<bool>("ShowDbLog");
string configId = config.ConfigId;
////SQL执行前
db.GetConnectionScope(configId).Aop.OnLogExecuting = (sql, pars) =>
{
//if (showDbLog)
//{
// string log = $"【db{configId} SQL】{UtilMethods.GetSqlString(config.DbType, sql, pars)}\n";
// if (sql.TrimStart().StartsWith("SELECT", StringComparison.OrdinalIgnoreCase))
// {
// logger.Info(log);
// }
// else if (sql.StartsWith("UPDATE", StringComparison.OrdinalIgnoreCase) || sql.StartsWith("INSERT", StringComparison.OrdinalIgnoreCase))
// {
// logger.Warn(log);
// }
// else if (sql.StartsWith("DELETE", StringComparison.OrdinalIgnoreCase) || sql.StartsWith("TRUNCATE", StringComparison.OrdinalIgnoreCase))
// {
// logger.Error(log);
// }
// else
// {
// log = $"【db{configId} SQL语句】dbo.{sql} {string.Join(", ", pars.Select(x => x.ParameterName + " = " + GetParsValue(x)))};\n";
// logger.Info(log);
// }
// // 计算所需时间
//}
};
//SQL执行完
db.GetConnectionScope(configId).Aop.OnLogExecuted = (sql, pars) =>
{
if (showDbLog)
{
//执行完了可以输出SQL执行时间 (OnLogExecutedDelegate)
string spendTime = "\n 这个sql耗时" + db.Ado.SqlExecutionTime.TotalSeconds.ToString() + "秒";
string log = $"【db{configId} SQL】{UtilMethods.GetSqlString(config.DbType, sql, pars)}\n";
if (sql.TrimStart().StartsWith("SELECT", StringComparison.OrdinalIgnoreCase))
{
logger.Info(log);
logger.Info(log+ spendTime);
}
else if (sql.StartsWith("UPDATE", StringComparison.OrdinalIgnoreCase) || sql.StartsWith("INSERT", StringComparison.OrdinalIgnoreCase))
{
logger.Warn(log);
logger.Warn(log+ spendTime);
}
else if (sql.StartsWith("DELETE", StringComparison.OrdinalIgnoreCase) || sql.StartsWith("TRUNCATE", StringComparison.OrdinalIgnoreCase))
{
logger.Error(log);
logger.Error(log + spendTime);
}
else
{
log = $"【db{configId} SQL语句】dbo.{sql} {string.Join(", ", pars.Select(x => x.ParameterName + " = " + GetParsValue(x)))};\n";
logger.Info(log);
logger.Info(log+ spendTime);
}
}
};
// SQL报错
db.GetConnectionScope(configId).Aop.OnError = (ex) =>
{
//var pars = db.Utilities.SerializeObject(((SugarParameter[])ex.Parametres).ToDictionary(it => it.ParameterName, it => it.Value));
@ -99,9 +143,13 @@ namespace DOAN.ServiceCore.SqlSugar
string sql = "【错误SQL】" + UtilMethods.GetSqlString(config.DbType, ex.Sql, (SugarParameter[])ex.Parametres) + "\r\n";
logger.Error(ex, $"{sql}\r\n{ex.Message}\r\n{ex.StackTrace}");
};
db.GetConnectionScope(configId).Aop.DataExecuting = (oldValue, entiyInfo) =>
{
};
//差异日志功能
db.GetConnectionScope(configId).Aop.OnDiffLogEvent = it =>
{