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;
         }
     }
 }
posted @ 2026-03-06 14:32  Hey,Coder!  阅读(3)  评论(0)    收藏  举报