c# 动态切换sqlsugar连接字符串
public class BLLDBService
{
private static ConcurrentDictionary<string, ISqlSugarClient> DBList = new();
private readonly ISqlSugarClient sqlSugar;
private readonly IServiceProvider serviceProvider;
public BLLDBService(ISqlSugarClient sqlSugar, IServiceProvider serviceProvider)
{
this.sqlSugar = sqlSugar;
this.serviceProvider = serviceProvider;
}
private ISqlSugarClient GetDBClient(string dbNo)
{
if (!DBList.ContainsKey(dbNo))
{
throw new Exception("DBCannotCreate");
}
return DBList[dbNo];
}
public static void InjectDB(string dbNo, SqlSugar.DbType dbType, string connectionStr)
{
DBList.AddOrUpdate(dbNo, f =>
new SqlSugarScope(new ConnectionConfig()
{
DbType = dbType,
ConnectionString = connectionStr,
IsAutoCloseConnection = true,
AopEvents = new AopEvents
{
OnLogExecuting = (log, para) =>
{
//Console.WriteLine(log);
}
}
})
, (f, client) =>
new SqlSugarScope(new ConnectionConfig()
{
DbType = dbType,
ConnectionString = connectionStr,
IsAutoCloseConnection = true,
AopEvents = new AopEvents
{
OnLogExecuting = (log, para) =>
{
//Console.WriteLine(log);
}
}
})
);
}
public static void DetectAndInjectDB(string dbNo, SqlSugar.DbType dbType, string connectionStr)
{
if (!DBList.ContainsKey(dbNo))
{
InjectDB( dbNo, dbType, connectionStr);
return;
}
var oldData = DBList[dbNo];
if (oldData?.CurrentConnectionConfig == null)
{
InjectDB(dbNo, dbType, connectionStr);
return;
}
if (oldData.CurrentConnectionConfig.ConnectionString != connectionStr||
oldData.CurrentConnectionConfig.DbType != dbType)
{
InjectDB(dbNo, dbType, connectionStr);
return;
}
}
}
留待后查,同时方便他人
联系我:ivesbao@163.com
联系我:ivesbao@163.com

浙公网安备 33010602011771号