Ver código fonte

优化多库切换

zuohuaijun 4 anos atrás
pai
commit
7ef665b5bc

+ 10 - 13
Admin.NET/Admin.NET.Core/Service/CodeGen/CodeGenConfigService.cs

@@ -6,14 +6,10 @@
 [ApiDescriptionSettings(Name = "代码生成配置", Order = 149)]
 public class CodeGenConfigService : IDynamicApiController, ITransient
 {
-    private readonly SqlSugarRepository<SysCodeGenConfig> _sysCodeGenConfigRep;
-
     private readonly ISqlSugarClient _db;
 
-    public CodeGenConfigService(SqlSugarRepository<SysCodeGenConfig> sysCodeGenConfigRep,
-        ISqlSugarClient db)
+    public CodeGenConfigService(ISqlSugarClient db)
     {
-        _sysCodeGenConfigRep = sysCodeGenConfigRep;
         _db = db;
     }
 
@@ -25,8 +21,9 @@ public class CodeGenConfigService : IDynamicApiController, ITransient
     [HttpGet("/sysCodeGenerateConfig/list")]
     public async Task<List<CodeGenConfig>> List([FromQuery] CodeGenConfig input)
     {
-        return await _sysCodeGenConfigRep.AsQueryable().Where(u => u.CodeGenId == input.CodeGenId && u.WhetherCommon != YesNoEnum.Y.ToString())
-          .Select<CodeGenConfig>().ToListAsync();
+        return await _db.Queryable<SysCodeGenConfig>()
+            .Where(u => u.CodeGenId == input.CodeGenId && u.WhetherCommon != YesNoEnum.Y.ToString())
+            .Select<CodeGenConfig>().ToListAsync();
     }
 
     /// <summary>
@@ -38,7 +35,7 @@ public class CodeGenConfigService : IDynamicApiController, ITransient
     public async Task Add(CodeGenConfig input)
     {
         var codeGenConfig = input.Adapt<SysCodeGenConfig>();
-        await _sysCodeGenConfigRep.InsertAsync(codeGenConfig);
+        await _db.Insertable(codeGenConfig).ExecuteCommandAsync();
     }
 
     /// <summary>
@@ -49,7 +46,7 @@ public class CodeGenConfigService : IDynamicApiController, ITransient
     [NonAction]
     public async Task Delete(long codeGenId)
     {
-        await _sysCodeGenConfigRep.DeleteAsync(u => u.CodeGenId == codeGenId);
+        await _db.Deleteable<SysCodeGenConfig>().Where(u => u.CodeGenId == codeGenId).ExecuteCommandAsync();
     }
 
     /// <summary>
@@ -62,7 +59,7 @@ public class CodeGenConfigService : IDynamicApiController, ITransient
     {
         if (inputList == null || inputList.Count < 1) return;
         List<SysCodeGenConfig> list = inputList.Adapt<List<SysCodeGenConfig>>();
-        await _sysCodeGenConfigRep.Context.Updateable(list).ExecuteCommandAsync();
+        await _db.Updateable(list).ExecuteCommandAsync();
     }
 
     /// <summary>
@@ -73,7 +70,7 @@ public class CodeGenConfigService : IDynamicApiController, ITransient
     [HttpGet("/sysCodeGenerateConfig/detail")]
     public async Task<SysCodeGenConfig> Detail(CodeGenConfig input)
     {
-        return await _sysCodeGenConfigRep.AsQueryable().FirstAsync(u => u.Id == input.Id);
+        return await _db.Queryable<SysCodeGenConfig>().FirstAsync(u => u.Id == input.Id);
     }
 
     /// <summary>
@@ -127,7 +124,7 @@ public class CodeGenConfigService : IDynamicApiController, ITransient
             codeGenConfigs.Add(codeGenConfig);
         }
         // 多库代码生成---这里要切回主库
-        _db.AsTenant().ChangeDatabase(SqlSugarConst.ConfigId);
-        _sysCodeGenConfigRep.Context.Insertable(codeGenConfigs).ExecuteCommand();
+        _db.AsTenant().GetConnectionScope(SqlSugarConst.ConfigId);
+        _db.Insertable(codeGenConfigs).ExecuteCommand();
     }
 }

+ 21 - 27
Admin.NET/Admin.NET.Core/Service/CodeGen/CodeGenService.cs

@@ -6,27 +6,21 @@ namespace Admin.NET.Core.Service;
 [ApiDescriptionSettings(Name = "代码生成器", Order = 150)]
 public class CodeGenService : IDynamicApiController, ITransient
 {
-    private readonly SqlSugarRepository<SysCodeGen> _sysCodeGenRep;
-    private readonly SqlSugarRepository<SysMenu> _sysMenuRep;
+    private readonly ISqlSugarClient _db;
+
     private readonly CodeGenConfigService _codeGenConfigService;
     private readonly IViewEngine _viewEngine;
     private readonly ICommonService _commonService;
 
-    private readonly ISqlSugarClient _db;
-
-    public CodeGenService(SqlSugarRepository<SysCodeGen> sysCodeGenRep,
-        SqlSugarRepository<SysMenu> sysMenuRep,
+    public CodeGenService(ISqlSugarClient db,
         CodeGenConfigService codeGenConfigService,
         IViewEngine viewEngine,
-        ICommonService commonService,
-        ISqlSugarClient db)
+        ICommonService commonService)
     {
-        _sysCodeGenRep = sysCodeGenRep;
-        _sysMenuRep = sysMenuRep;
+        _db = db;
         _codeGenConfigService = codeGenConfigService;
         _viewEngine = viewEngine;
         _commonService = commonService;
-        _db = db;
     }
 
     /// <summary>
@@ -38,7 +32,7 @@ public class CodeGenService : IDynamicApiController, ITransient
     public async Task<dynamic> QueryCodeGenPageList([FromQuery] CodeGenInput input)
     {
         var tableName = !string.IsNullOrEmpty(input.TableName?.Trim());
-        var codeGens = await _sysCodeGenRep.AsQueryable()
+        var codeGens = await _db.Queryable<SysCodeGen>()
             .WhereIF(!string.IsNullOrWhiteSpace(input.TableName), u => u.TableName.Contains(input.TableName.Trim()))
             .ToPagedListAsync(input.Page, input.PageSize);
         return codeGens;
@@ -52,12 +46,12 @@ public class CodeGenService : IDynamicApiController, ITransient
     [HttpPost("/codeGenerate/add")]
     public async Task AddCodeGen(AddCodeGenInput input)
     {
-        var isExist = await _sysCodeGenRep.AsQueryable().Where(u => u.TableName == input.TableName).AnyAsync();
+        var isExist = await _db.Queryable<SysCodeGen>().Where(u => u.TableName == input.TableName).AnyAsync();
         if (isExist)
             throw Oops.Oh(ErrorCodeEnum.D1400);
 
         var codeGen = input.Adapt<SysCodeGen>();
-        var newCodeGen = await _sysCodeGenRep.Context.Insertable(codeGen).ExecuteReturnEntityAsync();
+        var newCodeGen = await _db.Insertable(codeGen).ExecuteReturnEntityAsync();
         // 加入配置表中
         _codeGenConfigService.AddList(GetColumnList(input), newCodeGen);
     }
@@ -75,7 +69,7 @@ public class CodeGenService : IDynamicApiController, ITransient
         var codeGenConfigTaskList = new List<Task>();
         inputs.ForEach(u =>
         {
-            _sysCodeGenRep.DeleteById(u.Id);
+            _db.Deleteable<SysCodeGen>().In(u.Id).ExecuteCommand();
 
             // 删除配置表中
             codeGenConfigTaskList.Add(_codeGenConfigService.Delete(u.Id));
@@ -91,12 +85,12 @@ public class CodeGenService : IDynamicApiController, ITransient
     [HttpPost("/codeGenerate/edit")]
     public async Task UpdateCodeGen(UpdateCodeGenInput input)
     {
-        var isExist = await _sysCodeGenRep.AsQueryable().AnyAsync(u => u.TableName == input.TableName && u.Id != input.Id);
+        var isExist = await _db.Queryable<SysCodeGen>().AnyAsync(u => u.TableName == input.TableName && u.Id != input.Id);
         if (isExist)
             throw Oops.Oh(ErrorCodeEnum.D1400);
 
         var codeGen = input.Adapt<SysCodeGen>();
-        await _sysCodeGenRep.UpdateAsync(codeGen);
+        await _db.Updateable(codeGen).ExecuteCommandAsync();
     }
 
     /// <summary>
@@ -107,7 +101,7 @@ public class CodeGenService : IDynamicApiController, ITransient
     [HttpGet("/codeGenerate/detail")]
     public async Task<SysCodeGen> GetCodeGen([FromQuery] QueryCodeGenInput input)
     {
-        return await _sysCodeGenRep.AsQueryable().SingleAsync(m => m.Id == input.Id);
+        return await _db.Queryable<SysCodeGen>().SingleAsync(m => m.Id == input.Id);
     }
 
     /// <summary>
@@ -127,8 +121,8 @@ public class CodeGenService : IDynamicApiController, ITransient
     [HttpGet("/codeGenerate/InformationList/{configId}")]
     public async Task<List<TableOutput>> GetTableList(string configId = SqlSugarConst.ConfigId)
     {
-        //切库,多库代码生成用
-        _db.AsTenant().ChangeDatabase(configId);
+        // 切库---多库代码生成用
+        _db.AsTenant().GetConnectionScope(configId);
         List<DbTableInfo> dbTableInfos = _db.DbMaintenance.GetTableInfoList(false);//这里不能走缓存,否则切库不起作用
 
         List<string> dbTableNames = dbTableInfos.Select(x => x.Name).ToList();
@@ -157,7 +151,7 @@ public class CodeGenService : IDynamicApiController, ITransient
     public List<TableColumnOuput> GetColumnListByTableName(string tableName, string configId = SqlSugarConst.ConfigId)
     {
         // 切库---多库代码生成用
-        _db.AsTenant().ChangeDatabase(configId);
+        _db.AsTenant().GetConnectionScope(configId);
 
         // 获取实体类型属性
         var entityType = _db.DbMaintenance.GetTableInfoList(false).FirstOrDefault(u => u.Name == tableName);
@@ -182,7 +176,7 @@ public class CodeGenService : IDynamicApiController, ITransient
     {
         // 切库---多库代码生成用
         if (!string.IsNullOrEmpty(input.ConfigId))
-            _db.AsTenant().ChangeDatabase(input.ConfigId);
+            _db.AsTenant().GetConnectionScope(input.ConfigId);
 
         var entityType = _commonService.GetEntityInfos().Result.FirstOrDefault(m => m.EntityName == input.TableName);
         if (entityType == null)
@@ -216,7 +210,7 @@ public class CodeGenService : IDynamicApiController, ITransient
             var joinTableList = tableFieldList.Where(u => u.EffectType == "Upload" || u.EffectType == "fk").ToList();//需要连表查询的字段
             (string joinTableNames, string lowerJoinTableNames) = GetJoinTableStr(joinTableList);//获取连表的实体名和别名
 
-            var data = new CustomViewEngine(_sysCodeGenRep)
+            var data = new CustomViewEngine(_db)
             {
                 ConfigId = input.ConfigId,
                 AuthorName = input.AuthorName,
@@ -283,10 +277,10 @@ public class CodeGenService : IDynamicApiController, ITransient
                 Path = "/" + className.ToLower(),
                 Component = "LAYOUT",
             };
-            pid = (await _sysMenuRep.Context.Insertable(menuType0).ExecuteReturnEntityAsync()).Id;
+            pid = (await _db.Insertable(menuType0).ExecuteReturnEntityAsync()).Id;
         }
         // 由于后续菜单会有修改, 需要判断下 pid 是否存在, 不存在报错
-        else if (!await _sysMenuRep.AsQueryable().AnyAsync(e => e.Id == pid))
+        else if (!await _db.Queryable<SysMenu>().AnyAsync(e => e.Id == pid))
             throw Oops.Oh(ErrorCodeEnum.D1505);
 
         // 菜单
@@ -299,7 +293,7 @@ public class CodeGenService : IDynamicApiController, ITransient
             Path = "/" + className.ToLower(),
             Component = "/main/" + className + "/index",
         };
-        var pid1 = (await _sysMenuRep.Context.Insertable(menuType1).ExecuteReturnEntityAsync()).Id;
+        var pid1 = (await _db.Insertable(menuType1).ExecuteReturnEntityAsync()).Id;
 
         // 按钮-page
         var menuType2 = new SysMenu
@@ -347,7 +341,7 @@ public class CodeGenService : IDynamicApiController, ITransient
         };
 
         var menuList = new List<SysMenu>() { menuType2, menuType2_1, menuType2_2, menuType2_3, menuType2_4 };
-        await _sysMenuRep.Context.Insertable(menuList).ExecuteCommandAsync();
+        await _db.Insertable(menuList).ExecuteCommandAsync();
     }
 
     /// <summary>

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

@@ -2,15 +2,15 @@
 
 public class CustomViewEngine : ViewEngineModel
 {
-    private readonly SqlSugarRepository<SysCodeGen> _sysCodeGenRep; // 代码生成器仓储
+    private readonly ISqlSugarClient _db;
 
     public CustomViewEngine()
     {
     }
 
-    public CustomViewEngine(SqlSugarRepository<SysCodeGen> sysCodeGenRep)
+    public CustomViewEngine(ISqlSugarClient db)
     {
-        _sysCodeGenRep = sysCodeGenRep;
+        _db = db;
     }
 
     /// <summary>
@@ -48,7 +48,7 @@ public class CustomViewEngine : ViewEngineModel
         ColumnList = GetColumnListByTableName(tbName.ToString());
         var col = ColumnList.Where(c => c.ColumnName == colName.ToString()).FirstOrDefault();
         //多库代码生成切库调用后切换回原库
-        _sysCodeGenRep.Context.AsTenant().ChangeDatabase(SqlSugarConst.ConfigId);
+        _db.AsTenant().GetConnectionScope(SqlSugarConst.ConfigId);
         return col.NetType;
     }
 
@@ -56,14 +56,14 @@ public class CustomViewEngine : ViewEngineModel
     {
         //多库代码生成切换库
         if (ConfigId != SqlSugarConst.ConfigId)
-            _sysCodeGenRep.Context.AsTenant().ChangeDatabase(ConfigId);
+            _db.AsTenant().GetConnectionScope(ConfigId);
 
         // 获取实体类型属性
-        var entityType = _sysCodeGenRep.Context.DbMaintenance.GetTableInfoList().FirstOrDefault(u => u.Name == tableName);
+        var entityType = _db.DbMaintenance.GetTableInfoList().FirstOrDefault(u => u.Name == tableName);
         if (entityType == null) return null;
 
         // 按原始类型的顺序获取所有实体类型属性(不包含导航属性,会返回null)
-        return _sysCodeGenRep.Context.DbMaintenance.GetColumnInfosByTableName(entityType.Name).Select(u => new TableColumnOuput
+        return _db.DbMaintenance.GetColumnInfosByTableName(entityType.Name).Select(u => new TableColumnOuput
         {
             ColumnName = u.DbColumnName,
             ColumnKey = u.IsPrimarykey.ToString(),

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

@@ -154,7 +154,7 @@ public static class SqlSugarSetup
         foreach (var entityType in entityTypes)
         {
             var tAtt = entityType.GetCustomAttribute<TenantAttribute>();
-            db.ChangeDatabase(tAtt == null ? SqlSugarConst.ConfigId : tAtt.configId);
+            db.GetConnectionScope(tAtt == null ? SqlSugarConst.ConfigId : tAtt.configId);
             db.CodeFirst.InitTables(entityType);
         }
 
@@ -173,7 +173,7 @@ public static class SqlSugarSetup
 
             var entityType = seedType.GetInterfaces().First().GetGenericArguments().First();
             var tAtt = entityType.GetCustomAttribute<TenantAttribute>();
-            db.ChangeDatabase(tAtt == null ? SqlSugarConst.ConfigId : tAtt.configId);
+            db.GetConnectionScope(tAtt == null ? SqlSugarConst.ConfigId : tAtt.configId);
 
             var seedDataTable = seedData.ToList().ToDataTable();
             if (seedDataTable.Columns.Contains(SqlSugarConst.PrimaryKey))