浏览代码

修复多库切换

zuohuaijun 3 年之前
父节点
当前提交
f4eb46ad2a

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/CodeGen/CodeGenConfigService.cs

@@ -124,7 +124,7 @@ public class CodeGenConfigService : IDynamicApiController, ITransient
             codeGenConfigs.Add(codeGenConfig);
         }
         // 多库代码生成---这里要切回主库
-        _db.AsTenant().GetConnectionScope(SqlSugarConst.ConfigId);
-        _db.Insertable(codeGenConfigs).ExecuteCommand();
+        var provider = _db.AsTenant().GetConnectionScope(SqlSugarConst.ConfigId);
+        provider.Insertable(codeGenConfigs).ExecuteCommand();
     }
 }

+ 7 - 8
Admin.NET/Admin.NET.Core/Service/CodeGen/CodeGenService.cs

@@ -122,8 +122,8 @@ public class CodeGenService : IDynamicApiController, ITransient
     public async Task<List<TableOutput>> GetTableList(string configId = SqlSugarConst.ConfigId)
     {
         // 切库---多库代码生成用
-        _db.AsTenant().GetConnectionScope(configId);
-        List<DbTableInfo> dbTableInfos = _db.DbMaintenance.GetTableInfoList(false);//这里不能走缓存,否则切库不起作用
+        var provider = _db.AsTenant().GetConnectionScope(configId);
+        List<DbTableInfo> dbTableInfos = provider.DbMaintenance.GetTableInfoList(false); // 这里不能走缓存,否则切库不起作用
 
         List<string> dbTableNames = dbTableInfos.Select(x => x.Name).ToList();
 
@@ -151,13 +151,13 @@ public class CodeGenService : IDynamicApiController, ITransient
     public List<TableColumnOuput> GetColumnListByTableName(string tableName, string configId = SqlSugarConst.ConfigId)
     {
         // 切库---多库代码生成用
-        _db.AsTenant().GetConnectionScope(configId);
+        var provider = _db.AsTenant().GetConnectionScope(configId);
 
         // 获取实体类型属性
-        var entityType = _db.DbMaintenance.GetTableInfoList(false).FirstOrDefault(u => u.Name == tableName);
+        var entityType = provider.DbMaintenance.GetTableInfoList(false).FirstOrDefault(u => u.Name == tableName);
         if (entityType == null) return null;
         // 按原始类型的顺序获取所有实体类型属性(不包含导航属性,会返回null)
-        return _db.DbMaintenance.GetColumnInfosByTableName(entityType.Name).Select(u => new TableColumnOuput
+        return provider.DbMaintenance.GetColumnInfosByTableName(entityType.Name).Select(u => new TableColumnOuput
         {
             ColumnName = u.DbColumnName,
             ColumnKey = u.IsPrimarykey.ToString(),
@@ -175,14 +175,13 @@ public class CodeGenService : IDynamicApiController, ITransient
     public List<TableColumnOuput> GetColumnList([FromQuery] AddCodeGenInput input)
     {
         // 切库---多库代码生成用
-        if (!string.IsNullOrEmpty(input.ConfigId))
-            _db.AsTenant().GetConnectionScope(input.ConfigId);
+        var provider = _db.AsTenant().GetConnectionScope(!string.IsNullOrEmpty(input.ConfigId) ? input.ConfigId : SqlSugarConst.ConfigId);
 
         var entityType = _commonService.GetEntityInfos().Result.FirstOrDefault(m => m.EntityName == input.TableName);
         if (entityType == null)
             return null;
 
-        return _db.DbMaintenance.GetColumnInfosByTableName(entityType.DbTableName, false).Select(u => new TableColumnOuput
+        return provider.DbMaintenance.GetColumnInfosByTableName(entityType.DbTableName, false).Select(u => new TableColumnOuput
         {
             ColumnName = u.DbColumnName,
             ColumnKey = u.IsPrimarykey.ToString(),

+ 3 - 6
Admin.NET/Admin.NET.Core/Service/CodeGen/Dto/CustomViewEngine.cs

@@ -47,23 +47,20 @@ public class CustomViewEngine : ViewEngineModel
     {
         ColumnList = GetColumnListByTableName(tbName.ToString());
         var col = ColumnList.Where(c => c.ColumnName == colName.ToString()).FirstOrDefault();
-        //多库代码生成切库调用后切换回原库
-        _db.AsTenant().GetConnectionScope(SqlSugarConst.ConfigId);
         return col.NetType;
     }
 
     public List<TableColumnOuput> GetColumnListByTableName(string tableName)
     {
         //多库代码生成切换库
-        if (ConfigId != SqlSugarConst.ConfigId)
-            _db.AsTenant().GetConnectionScope(ConfigId);
+        var provider = _db.AsTenant().GetConnectionScope(ConfigId != SqlSugarConst.ConfigId ? ConfigId : SqlSugarConst.ConfigId);
 
         // 获取实体类型属性
-        var entityType = _db.DbMaintenance.GetTableInfoList().FirstOrDefault(u => u.Name == tableName);
+        var entityType = provider.DbMaintenance.GetTableInfoList().FirstOrDefault(u => u.Name == tableName);
         if (entityType == null) return null;
 
         // 按原始类型的顺序获取所有实体类型属性(不包含导航属性,会返回null)
-        return _db.DbMaintenance.GetColumnInfosByTableName(entityType.Name).Select(u => new TableColumnOuput
+        return provider.DbMaintenance.GetColumnInfosByTableName(entityType.Name).Select(u => new TableColumnOuput
         {
             ColumnName = u.DbColumnName,
             ColumnKey = u.IsPrimarykey.ToString(),

+ 5 - 5
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs

@@ -154,8 +154,8 @@ public static class SqlSugarSetup
         foreach (var entityType in entityTypes)
         {
             var tAtt = entityType.GetCustomAttribute<TenantAttribute>();
-            db.GetConnectionScope(tAtt == null ? SqlSugarConst.ConfigId : tAtt.configId);
-            db.CodeFirst.InitTables(entityType);
+            var provider = db.GetConnectionScope(tAtt == null ? SqlSugarConst.ConfigId : tAtt.configId);
+            provider.CodeFirst.InitTables(entityType);
         }
 
         // 获取所有实体种子数据
@@ -173,18 +173,18 @@ public static class SqlSugarSetup
 
             var entityType = seedType.GetInterfaces().First().GetGenericArguments().First();
             var tAtt = entityType.GetCustomAttribute<TenantAttribute>();
-            db.GetConnectionScope(tAtt == null ? SqlSugarConst.ConfigId : tAtt.configId);
+            var provider = db.GetConnectionScope(tAtt == null ? SqlSugarConst.ConfigId : tAtt.configId);
 
             var seedDataTable = seedData.ToList().ToDataTable();
             if (seedDataTable.Columns.Contains(SqlSugarConst.PrimaryKey))
             {
-                var storage = db.Storageable(seedDataTable).WhereColumns(SqlSugarConst.PrimaryKey).ToStorage();
+                var storage = provider.Storageable(seedDataTable).WhereColumns(SqlSugarConst.PrimaryKey).ToStorage();
                 storage.AsInsertable.ExecuteCommand();
                 storage.AsUpdateable.ExecuteCommand();
             }
             else //没有主键或者不是预定义的主键(没主键有重复的可能)
             {
-                var storage = db.Storageable(seedDataTable).ToStorage();
+                var storage = provider.Storageable(seedDataTable).ToStorage();
                 storage.AsInsertable.ExecuteCommand();
             }
         }