using Microsoft.Extensions.Caching.Memory;
|
using Microsoft.Extensions.DependencyInjection;
|
using SqlSugar;
|
using StackExchange.Profiling;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Core.AOP;
|
using WIDESEAWCS_Core.DB;
|
using WIDESEAWCS_Core.Helper;
|
using WIDESEAWCS_Core.LogHelper;
|
using WIDESEAWCS_Core.Seed;
|
|
namespace WIDESEAWCS_Core
|
{
|
/// <summary>
|
/// SqlSugar 启动服务
|
/// </summary>
|
public static class SqlsugarSetup
|
{
|
private static readonly MemoryCache Cache = new MemoryCache(new MemoryCacheOptions());
|
|
public static void AddSqlsugarSetup(this IServiceCollection services)
|
{
|
if (services == null) throw new ArgumentNullException(nameof(services));
|
|
// 默认添加主数据库连接
|
//MainDb.CurrentDbConnId = AppSettings.app(new string[] { "MainDB" });
|
|
// SqlSugarScope是线程安全,可使用单例注入
|
// 参考:https://www.donet5.com/Home/Doc?typeId=1181
|
services.AddScoped<ISqlSugarClient>(o =>
|
{
|
var memoryCache = o.GetRequiredService<IMemoryCache>();
|
|
// 连接字符串
|
var listConfig = new List<ConnectionConfig>
|
{
|
new ConnectionConfig
|
{
|
ConfigId = MainDb.CurrentDbConnId,
|
ConnectionString = DBContext.GetMainConnectionDb().Connection,
|
IsAutoCloseConnection = true,
|
DbType = MainDb.DbType,
|
AopEvents = new AopEvents
|
{
|
OnLogExecuting = (sql, p) =>
|
{
|
Parallel.For(0, 1, e =>
|
{
|
MiniProfiler.Current.CustomTiming("SQL:", GetParas(p) + "【SQL语句】:" + sql);
|
});
|
Console.Out.WriteLine(GetParas(p));
|
Console.Out.WriteLine(sql);
|
Console.Out.WriteLine();
|
}
|
},
|
}
|
};
|
#region 从库
|
//var listConfig_Slave = new List<SlaveConnectionConfig>();
|
//BaseDBConfig.MutiConnectionString.ForEach(s =>
|
//{
|
// if(s.ConnId != MainDb.CurrentDbConnId)
|
// {
|
// listConfig_Slave.Add(new SlaveConnectionConfig()
|
// {
|
// HitRate = s.HitRate,
|
// ConnectionString = s.Connection
|
// });
|
// }
|
|
//});
|
|
//BaseDBConfig.MutiConnectionString.ForEach(m =>
|
//{
|
// listConfig.Add(new ConnectionConfig()
|
// {
|
// ConfigId = m.ConnId.ObjToString().ToLower(),
|
// ConnectionString = m.Connection,
|
// DbType = (DbType)m.DbType,
|
// IsAutoCloseConnection = true,
|
// MoreSettings = new ConnMoreSettings()
|
// {
|
// //IsWithNoLockQuery = true,
|
// IsAutoRemoveDataCache = true
|
// },
|
// // 从库
|
// //SlaveConnectionConfigs = listConfig_Slave,
|
// // 自定义特性
|
// ConfigureExternalServices = new ConfigureExternalServices()
|
// {
|
// DataInfoCacheService = new SqlSugarMemoryCacheService(memoryCache),
|
// EntityService = (property, column) =>
|
// {
|
// if (column.IsPrimarykey && property.PropertyType == typeof(int))
|
// {
|
// column.IsIdentity = true;
|
// }
|
// }
|
// },
|
// InitKeyType = InitKeyType.Attribute,
|
// AopEvents = new AopEvents()
|
// {
|
// OnError = x =>
|
// {
|
// Console.WriteLine(x.Sql);
|
// }
|
// }
|
// }
|
// );
|
//});
|
#endregion
|
|
SqlSugarClient sqlSugarClient = new SqlSugarClient(listConfig, db =>
|
{
|
db.Aop.DataExecuting = SqlSugarAop.DataExecuting;
|
});
|
return sqlSugarClient;
|
});
|
}
|
|
private static string GetWholeSql(SugarParameter[] paramArr, string sql)
|
{
|
foreach (var param in paramArr)
|
{
|
sql.Replace(param.ParameterName, param.Value.ObjToString());
|
}
|
|
return sql;
|
}
|
|
private static string GetParas(SugarParameter[] pars)
|
{
|
string key = "【SQL参数】:";
|
foreach (var param in pars)
|
{
|
key += $"{param.ParameterName}:{param.Value}\n";
|
}
|
|
return key;
|
}
|
}
|
}
|