Procházet zdrojové kódy

😁1、调整系统表与业务表模式(业务表不再贴租户业务特性) 2、升级nuget包及其他优化

zuohuaijun před 3 roky
rodič
revize
d0f7790d16
52 změnil soubory, kde provedl 281 přidání a 297 odebrání
  1. 0 1
      Admin.NET/Admin.NET.Application/Entity/Business.cs
  2. 3 3
      Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj
  3. 2 7
      Admin.NET/Admin.NET.Core/Admin.NET.Core.xml
  4. 2 2
      Admin.NET/Admin.NET.Core/Attribute/SystemTableAttribute.cs
  5. 0 10
      Admin.NET/Admin.NET.Core/Attribute/TenantBusinessAttribute.cs
  6. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysCodeGen.cs
  7. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysCodeGenConfig.cs
  8. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysConfig.cs
  9. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysDictData.cs
  10. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysDictType.cs
  11. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysFile.cs
  12. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysJobCluster.cs
  13. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysJobDetail.cs
  14. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysJobTrigger.cs
  15. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysLogAudit.cs
  16. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysLogDiff.cs
  17. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysLogEx.cs
  18. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysLogOp.cs
  19. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysLogVis.cs
  20. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysMenu.cs
  21. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysNotice.cs
  22. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysNoticeUser.cs
  23. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysOnlineUser.cs
  24. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysOrg.cs
  25. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysPos.cs
  26. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysRegion.cs
  27. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysRole.cs
  28. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysRoleMenu.cs
  29. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysRoleOrg.cs
  30. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysTenant.cs
  31. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysUser.cs
  32. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysUserExtOrg.cs
  33. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysUserRole.cs
  34. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysWechatPay.cs
  35. 1 0
      Admin.NET/Admin.NET.Core/Entity/SysWechatUser.cs
  36. 1 3
      Admin.NET/Admin.NET.Core/Service/Common/CommonService.cs
  37. 0 2
      Admin.NET/Admin.NET.Core/Service/Config/Dto/ConfigInput.cs
  38. 238 238
      Admin.NET/Admin.NET.Core/Service/DataBase/SysDatabaseService.cs
  39. 0 2
      Admin.NET/Admin.NET.Core/Service/Dict/Dto/DictDataInput.cs
  40. 0 2
      Admin.NET/Admin.NET.Core/Service/Dict/Dto/DictTypeInput.cs
  41. 0 2
      Admin.NET/Admin.NET.Core/Service/Job/Dto/JobDetailInput.cs
  42. 0 2
      Admin.NET/Admin.NET.Core/Service/Job/Dto/JobTriggerInput.cs
  43. 0 2
      Admin.NET/Admin.NET.Core/Service/Menu/Dto/MenuInput.cs
  44. 0 2
      Admin.NET/Admin.NET.Core/Service/Notice/Dto/NoticeInput.cs
  45. 0 2
      Admin.NET/Admin.NET.Core/Service/Org/Dto/OrgInput.cs
  46. 0 2
      Admin.NET/Admin.NET.Core/Service/Pos/Dto/PosInput.cs
  47. 0 2
      Admin.NET/Admin.NET.Core/Service/Region/Dto/RegionInput.cs
  48. 0 2
      Admin.NET/Admin.NET.Core/Service/Role/Dto/RoleInput.cs
  49. 0 2
      Admin.NET/Admin.NET.Core/Service/Tenant/Dto/TenantInput.cs
  50. 0 2
      Admin.NET/Admin.NET.Core/Service/User/Dto/UserInput.cs
  51. 1 1
      Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarRepository.cs
  52. 4 6
      Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs

+ 0 - 1
Admin.NET/Admin.NET.Application/Entity/Business.cs

@@ -4,7 +4,6 @@ namespace Admin.NET.Application.Entity;
 /// 租户业务分库表
 /// </summary>
 [SugarTable(null, "租户业务分库表")]
-[TenantBusiness]
 public class TenantBusiness : EntityTenant
 {
     /// <summary>

+ 3 - 3
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -17,9 +17,9 @@
     <PackageReference Include="AngleSharp" Version="0.17.1" />
     <PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
     <PackageReference Include="DotNetCore.Natasha.CSharp" Version="5.0.2" />
-    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.8.3.7" />
-    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.8.3.7" />
-    <PackageReference Include="Furion.Pure" Version="4.8.3.7" />
+    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.8.3.8" />
+    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.8.3.8" />
+    <PackageReference Include="Furion.Pure" Version="4.8.3.8" />
     <PackageReference Include="Lazy.Captcha.Core" Version="1.1.6" />
     <PackageReference Include="Magicodes.IE.Excel" Version="2.7.2" />
     <PackageReference Include="Magicodes.IE.Pdf" Version="2.7.2" />

+ 2 - 7
Admin.NET/Admin.NET.Core/Admin.NET.Core.xml

@@ -19,14 +19,9 @@
             忽略更新种子数据特性
             </summary>
         </member>
-        <member name="T:Admin.NET.Core.NotTableAttribute">
+        <member name="T:Admin.NET.Core.SystemTableAttribute">
             <summary>
-            非实体表特性
-            </summary>
-        </member>
-        <member name="T:Admin.NET.Core.TenantBusinessAttribute">
-            <summary>
-            租户业务表特性
+            系统表特性
             </summary>
         </member>
         <member name="M:Admin.NET.Core.CacheSetup.AddCache(Microsoft.Extensions.DependencyInjection.IServiceCollection)">

+ 2 - 2
Admin.NET/Admin.NET.Core/Attribute/NotTableAttribute.cs → Admin.NET/Admin.NET.Core/Attribute/SystemTableAttribute.cs

@@ -1,10 +1,10 @@
 namespace Admin.NET.Core;
 
 /// <summary>
-/// 非实体表特性
+/// 系统表特性
 /// </summary>
 [SuppressSniffer]
 [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
-public class NotTableAttribute : Attribute
+public class SystemTableAttribute : Attribute
 {
 }

+ 0 - 10
Admin.NET/Admin.NET.Core/Attribute/TenantBusinessAttribute.cs

@@ -1,10 +0,0 @@
-namespace Admin.NET.Core;
-
-/// <summary>
-/// 租户业务表特性
-/// </summary>
-[SuppressSniffer]
-[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
-public class TenantBusinessAttribute : Attribute
-{
-}

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysCodeGen.cs

@@ -4,6 +4,7 @@
 /// 代码生成表
 /// </summary>
 [SugarTable(null, "代码生成表")]
+[SystemTable]
 public class SysCodeGen : EntityBase
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysCodeGenConfig.cs

@@ -4,6 +4,7 @@
 /// 代码生成字段配置表
 /// </summary>
 [SugarTable(null, "代码生成字段配置表")]
+[SystemTable]
 public class SysCodeGenConfig : EntityBase
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysConfig.cs

@@ -4,6 +4,7 @@
 /// 系统参数配置表
 /// </summary>
 [SugarTable(null, "系统参数配置表")]
+[SystemTable]
 public class SysConfig : EntityBase
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysDictData.cs

@@ -4,6 +4,7 @@
 /// 系统字典值表
 /// </summary>
 [SugarTable(null, "系统字典值表")]
+[SystemTable]
 public class SysDictData : EntityBase
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysDictType.cs

@@ -4,6 +4,7 @@
 /// 系统字典类型表
 /// </summary>
 [SugarTable(null, "系统字典类型表")]
+[SystemTable]
 public class SysDictType : EntityBase
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysFile.cs

@@ -4,6 +4,7 @@ namespace Admin.NET.Core;
 /// 系统文件表
 /// </summary>
 [SugarTable(null, "系统文件表")]
+[SystemTable]
 public class SysFile : EntityBase
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysJobCluster.cs

@@ -4,6 +4,7 @@
 /// 系统作业集群表
 /// </summary>
 [SugarTable(null, "系统作业集群表")]
+[SystemTable]
 public class SysJobCluster : EntityBaseId
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysJobDetail.cs

@@ -4,6 +4,7 @@
 /// 系统作业信息表
 /// </summary>
 [SugarTable(null, "系统作业信息表")]
+[SystemTable]
 public class SysJobDetail : EntityBaseId
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysJobTrigger.cs

@@ -4,6 +4,7 @@
 /// 系统作业触发器表
 /// </summary>
 [SugarTable(null, "系统作业触发器表")]
+[SystemTable]
 public class SysJobTrigger : EntityBaseId
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysLogAudit.cs

@@ -4,6 +4,7 @@
 /// 系统审计日志表
 /// </summary>
 [SugarTable(null, "系统审计日志表")]
+[SystemTable]
 public class SysLogAudit : EntityBase
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysLogDiff.cs

@@ -4,6 +4,7 @@
 /// 系统差异日志表
 /// </summary>
 [SugarTable(null, "系统差异日志表")]
+[SystemTable]
 public class SysLogDiff : EntityBase
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysLogEx.cs

@@ -4,6 +4,7 @@
 /// 系统异常日志表
 /// </summary>
 [SugarTable(null, "系统异常日志表")]
+[SystemTable]
 public class SysLogEx : EntityTenant
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysLogOp.cs

@@ -4,6 +4,7 @@
 /// 系统操作日志表
 /// </summary>
 [SugarTable(null, "系统操作日志表")]
+[SystemTable]
 public class SysLogOp : EntityTenant
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysLogVis.cs

@@ -4,6 +4,7 @@
 /// 系统访问日志表
 /// </summary>
 [SugarTable(null, "系统访问日志表")]
+[SystemTable]
 public class SysLogVis : EntityTenant
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysMenu.cs

@@ -4,6 +4,7 @@
 /// 系统菜单表
 /// </summary>
 [SugarTable(null, "系统菜单表")]
+[SystemTable]
 public class SysMenu : EntityBase
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysNotice.cs

@@ -4,6 +4,7 @@
 /// 系统通知公告表
 /// </summary>
 [SugarTable(null, "系统通知公告表")]
+[SystemTable]
 public class SysNotice : EntityBase
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysNoticeUser.cs

@@ -4,6 +4,7 @@
 /// 系统通知公告用户表
 /// </summary>
 [SugarTable(null, "系统通知公告用户表")]
+[SystemTable]
 public class SysNoticeUser
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysOnlineUser.cs

@@ -4,6 +4,7 @@
 /// 系统在线用户表
 /// </summary>
 [SugarTable(null, "系统在线用户表")]
+[SystemTable]
 public class SysOnlineUser : EntityTenantId
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysOrg.cs

@@ -4,6 +4,7 @@
 /// 系统机构表
 /// </summary>
 [SugarTable(null, "系统机构表")]
+[SystemTable]
 public class SysOrg : EntityTenant
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysPos.cs

@@ -4,6 +4,7 @@
 /// 系统职位表
 /// </summary>
 [SugarTable(null, "系统职位表")]
+[SystemTable]
 public class SysPos : EntityTenant
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysRegion.cs

@@ -4,6 +4,7 @@
 /// 系统行政地区表
 /// </summary>
 [SugarTable(null, "系统行政地区表")]
+[SystemTable]
 public class SysRegion : EntityBaseId
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysRole.cs

@@ -4,6 +4,7 @@
 /// 系统角色表
 /// </summary>
 [SugarTable(null, "系统角色表")]
+[SystemTable]
 public class SysRole : EntityTenant
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysRoleMenu.cs

@@ -4,6 +4,7 @@
 /// 系统角色菜单表
 /// </summary>
 [SugarTable(null, "系统角色菜单表")]
+[SystemTable]
 public class SysRoleMenu : EntityBaseId
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysRoleOrg.cs

@@ -4,6 +4,7 @@
 /// 系统角色机构表
 /// </summary>
 [SugarTable(null, "系统角色机构表")]
+[SystemTable]
 public class SysRoleOrg : EntityBaseId
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysTenant.cs

@@ -4,6 +4,7 @@
 /// 系统租户表
 /// </summary>
 [SugarTable(null, "系统租户表")]
+[SystemTable]
 public class SysTenant : EntityBase
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysUser.cs

@@ -4,6 +4,7 @@ namespace Admin.NET.Core;
 /// 系统用户表
 /// </summary>
 [SugarTable(null, "系统用户表")]
+[SystemTable]
 public class SysUser : EntityTenant
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysUserExtOrg.cs

@@ -4,6 +4,7 @@
 /// 系统用户扩展机构表
 /// </summary>
 [SugarTable(null, "系统用户扩展机构表")]
+[SystemTable]
 public class SysUserExtOrg : EntityBaseId
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysUserRole.cs

@@ -4,6 +4,7 @@
 /// 系统用户角色表
 /// </summary>
 [SugarTable(null, "系统用户角色表")]
+[SystemTable]
 public class SysUserRole : EntityBaseId
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysWechatPay.cs

@@ -4,6 +4,7 @@
 /// 系统微信支付表
 /// </summary>
 [SugarTable(null, "系统微信支付表")]
+[SystemTable]
 public class SysWechatPay : EntityBase
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Entity/SysWechatUser.cs

@@ -4,6 +4,7 @@
 /// 系统微信用户表
 /// </summary>
 [SugarTable(null, "系统微信用户表")]
+[SystemTable]
 public class SysWechatUser : EntityBase
 {
     /// <summary>

+ 1 - 3
Admin.NET/Admin.NET.Core/Service/Common/CommonService.cs

@@ -21,7 +21,6 @@ public class CommonService : ICommonService, IScoped
         var entityInfos = new List<EntityInfo>();
 
         var type = typeof(SugarTable);
-        var type1 = typeof(NotTableAttribute);
         var types = new List<Type>();
         if (_codeGenOptions.EntityAssemblyNames != null)
         {
@@ -33,10 +32,9 @@ public class CommonService : ICommonService, IScoped
         }
         Func<Attribute[], bool> IsMyAttribute = o =>
         {
-            if (o.Where(c => c.GetType() == type1).Any()) return false;
             foreach (Attribute a in o)
             {
-                if (a.GetType() == type && a.GetType() != type1)
+                if (a.GetType() == type)
                     return true;
             }
             return false;

+ 0 - 2
Admin.NET/Admin.NET.Core/Service/Config/Dto/ConfigInput.cs

@@ -22,12 +22,10 @@ public class PageConfigInput : BasePageInput
     public string GroupCode { get; set; }
 }
 
-[NotTable]
 public class AddConfigInput : SysConfig
 {
 }
 
-[NotTable]
 public class UpdateConfigInput : AddConfigInput
 {
 }

+ 238 - 238
Admin.NET/Admin.NET.Core/Service/DataBase/SysDatabaseService.cs

@@ -1,241 +1,241 @@
-namespace Admin.NET.Core.Service;
-
-/// <summary>
-/// 系统数据库管理服务
-/// </summary>
-[ApiDescriptionSettings(Order = 145)]
-public class SysDatabaseService : IDynamicApiController, ITransient
-{
-    private readonly ISqlSugarClient _db;
-    private readonly IViewEngine _viewEngine;
-    private readonly CodeGenOptions _codeGenOptions;
-
-    public SysDatabaseService(ISqlSugarClient db,
-        IViewEngine viewEngine,
-        IOptions<CodeGenOptions> codeGenOptions)
-    {
-        _db = db;
-        _viewEngine = viewEngine;
-        _codeGenOptions = codeGenOptions.Value;
-    }
-
-    /// <summary>
-    /// 获取库列表
-    /// </summary>
-    /// <returns></returns>
-    [HttpGet("/sysDatabase/list")]
-    public List<dynamic> GetDbList()
-    {
-        return App.GetOptions<DbConnectionOptions>().ConnectionConfigs.Select(u => u.ConfigId).ToList();
-    }
-
-    /// <summary>
-    /// 获取字段列表
-    /// </summary>
-    /// <param name="tableName">表名</param>
-    /// <param name="configId">ConfigId</param>
-    /// <returns></returns>
-    [HttpGet("/sysDatabase/columnList")]
-    [AllowAnonymous]
-    public List<DbColumnOutput> GetColumnList(string tableName, string configId = SqlSugarConst.ConfigId)
-    {
-        var db = _db.AsTenant().GetConnectionScope(configId);
-        if (string.IsNullOrWhiteSpace(tableName))
-            return new List<DbColumnOutput>();
-
-        return db.DbMaintenance.GetColumnInfosByTableName(tableName, false).Adapt<List<DbColumnOutput>>();
-    }
-
-    /// <summary>
-    /// 增加列
-    /// </summary>
-    /// <param name="input"></param>
-    [HttpPost("/sysDatabase/addColumn")]
-    public void AddColumn(DbColumnInput input)
-    {
-        var column = new DbColumnInfo
-        {
-            ColumnDescription = input.ColumnDescription,
-            DbColumnName = input.DbColumnName,
-            IsIdentity = input.IsIdentity == 1,
-            IsNullable = input.IsNullable == 1,
-            IsPrimarykey = input.IsPrimarykey == 1,
-            Length = input.Length,
-            DecimalDigits = input.DecimalDigits,
-            DataType = input.DataType
-        };
-        var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
-        db.DbMaintenance.AddColumn(input.TableName, column);
-        db.DbMaintenance.AddColumnRemark(input.DbColumnName, input.TableName, input.ColumnDescription);
-        if (column.IsPrimarykey)
-            db.DbMaintenance.AddPrimaryKey(input.TableName, input.DbColumnName);
-    }
-
-    /// <summary>
-    /// 删除列
-    /// </summary>
-    /// <param name="input"></param>
-    [HttpPost("/sysDatabase/deleteColumn")]
-    public void DeleteColumn(DeleteDbColumnInput input)
-    {
-        var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
-        db.DbMaintenance.DropColumn(input.TableName, input.DbColumnName);
-    }
-
-    /// <summary>
-    /// 编辑列
-    /// </summary>
-    /// <param name="input"></param>
-    [HttpPost("/sysDatabase/updateColumn")]
-    public void UpdateColumn(UpdateDbColumnInput input)
-    {
-        var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
-        db.DbMaintenance.RenameColumn(input.TableName, input.OldColumnName, input.ColumnName);
-        if (db.DbMaintenance.IsAnyColumnRemark(input.ColumnName, input.TableName))
-            db.DbMaintenance.DeleteColumnRemark(input.ColumnName, input.TableName);
-        db.DbMaintenance.AddColumnRemark(input.ColumnName, input.TableName, string.IsNullOrWhiteSpace(input.Description) ? input.ColumnName : input.Description);
-    }
-
-    /// <summary>
-    /// 获取表列表
-    /// </summary>
-    /// <param name="configId">ConfigId</param>
-    /// <returns></returns>
-    [HttpGet("/sysDatabase/tableList")]
-    public List<DbTableInfo> GetTableList(string configId = SqlSugarConst.ConfigId)
-    {
-        var db = _db.AsTenant().GetConnectionScope(configId);
-        return db.DbMaintenance.GetTableInfoList(false);
-    }
-
-    /// <summary>
-    /// 增加表
-    /// </summary>
-    /// <param name="input"></param>
-    [HttpPost("/sysDatabase/addTable")]
-    public void AddTable(DbTableInput input)
-    {
-        var columns = new List<DbColumnInfo>();
-        if (input.DbColumnInfoList == null || !input.DbColumnInfoList.Any())
-            throw Oops.Oh(ErrorCodeEnum.db1000);
-
-        if (input.DbColumnInfoList.GroupBy(q => q.DbColumnName).Any(q => q.Count() > 1))
-        {
-            throw Oops.Oh(ErrorCodeEnum.db1002);
-        }
-
-        input.DbColumnInfoList.ForEach(m =>
-        {
-            columns.Add(new DbColumnInfo
-            {
-                DbColumnName = UtilMethods.ToUnderLine(m.DbColumnName.Trim()),
-                DataType = m.DataType,
-                Length = m.Length,
-                ColumnDescription = m.ColumnDescription,
-                IsNullable = m.IsNullable == 1,
-                IsIdentity = m.IsIdentity == 1,
-                IsPrimarykey = m.IsPrimarykey == 1,
-                DecimalDigits = m.DecimalDigits
-            });
-        });
-        var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
-        db.DbMaintenance.CreateTable(input.TableName, columns, false);
-
-        if (columns.Any(m => m.IsPrimarykey))
-            db.DbMaintenance.AddPrimaryKey(input.TableName, columns.FirstOrDefault(m => m.IsPrimarykey).DbColumnName);
-
-        if (db.CurrentConnectionConfig.DbType == SqlSugar.DbType.Sqlite || db.CurrentConnectionConfig.DbType == SqlSugar.DbType.MySql)
-            return;
-        db.DbMaintenance.AddTableRemark(input.TableName, input.Description);
-        input.DbColumnInfoList.ForEach(m =>
+namespace Admin.NET.Core.Service;
+
+/// <summary>
+/// 系统数据库管理服务
+/// </summary>
+[ApiDescriptionSettings(Order = 145)]
+public class SysDatabaseService : IDynamicApiController, ITransient
+{
+    private readonly ISqlSugarClient _db;
+    private readonly IViewEngine _viewEngine;
+    private readonly CodeGenOptions _codeGenOptions;
+
+    public SysDatabaseService(ISqlSugarClient db,
+        IViewEngine viewEngine,
+        IOptions<CodeGenOptions> codeGenOptions)
+    {
+        _db = db;
+        _viewEngine = viewEngine;
+        _codeGenOptions = codeGenOptions.Value;
+    }
+
+    /// <summary>
+    /// 获取库列表
+    /// </summary>
+    /// <returns></returns>
+    [HttpGet("/sysDatabase/list")]
+    public List<dynamic> GetDbList()
+    {
+        return App.GetOptions<DbConnectionOptions>().ConnectionConfigs.Select(u => u.ConfigId).ToList();
+    }
+
+    /// <summary>
+    /// 获取字段列表
+    /// </summary>
+    /// <param name="tableName">表名</param>
+    /// <param name="configId">ConfigId</param>
+    /// <returns></returns>
+    [HttpGet("/sysDatabase/columnList")]
+    [AllowAnonymous]
+    public List<DbColumnOutput> GetColumnList(string tableName, string configId = SqlSugarConst.ConfigId)
+    {
+        var db = _db.AsTenant().GetConnectionScope(configId);
+        if (string.IsNullOrWhiteSpace(tableName))
+            return new List<DbColumnOutput>();
+
+        return db.DbMaintenance.GetColumnInfosByTableName(tableName, false).Adapt<List<DbColumnOutput>>();
+    }
+
+    /// <summary>
+    /// 增加列
+    /// </summary>
+    /// <param name="input"></param>
+    [HttpPost("/sysDatabase/addColumn")]
+    public void AddColumn(DbColumnInput input)
+    {
+        var column = new DbColumnInfo
         {
-            m.DbColumnName = UtilMethods.ToUnderLine(m.DbColumnName);
-            db.DbMaintenance.AddColumnRemark(m.DbColumnName, input.TableName, string.IsNullOrWhiteSpace(m.ColumnDescription) ? m.DbColumnName : m.ColumnDescription);
-        });
-    }
-
-    /// <summary>
-    /// 删除表
-    /// </summary>
-    /// <param name="input"></param>
-    [HttpPost("/sysDatabase/deleteTable")]
-    public void DeleteTable(DeleteDbTableInput input)
-    {
-        var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
-        db.DbMaintenance.DropTable(input.TableName);
-    }
-
-    /// <summary>
-    /// 编辑表
-    /// </summary>
-    /// <param name="input"></param>
-    [HttpPost("/sysDatabase/updateTable")]
-    public void UpdateTable(UpdateDbTableInput input)
-    {
-        var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
-        db.DbMaintenance.RenameTable(input.OldTableName, input.TableName);
-        if (db.DbMaintenance.IsAnyTableRemark(input.TableName))
-            db.DbMaintenance.DeleteTableRemark(input.TableName);
-        db.DbMaintenance.AddTableRemark(input.TableName, input.Description);
-    }
-
-    /// <summary>
-    /// 创建实体
-    /// </summary>
-    /// <param name="input"></param>
-    [HttpPost("/sysDatabase/createEntity")]
-    public void CreateEntity(CreateEntityInput input)
-    {
-        input.Position = string.IsNullOrWhiteSpace(input.Position) ? "Admin.NET.Application" : input.Position;
-        input.EntityName = (input.EntityName == input.TableName && input.EntityName.Contains("_")) ? CodeGenUtil.CamelColumnName(input.EntityName, null) : input.EntityName;
-        string[] dbColumnNames = _codeGenOptions.EntityBaseColumn[input.BaseClassName];
-
-        var templatePath = GetEntityTemplatePath();
-        var targetPath = GetEntityTargetPath(input);
-        var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
-        DbTableInfo dbTableInfo = db.DbMaintenance.GetTableInfoList(false).FirstOrDefault(m => m.Name == input.TableName);
-        if (dbTableInfo == null)
-            throw Oops.Oh(ErrorCodeEnum.db1001);
-        List<DbColumnInfo> dbColumnInfos = db.DbMaintenance.GetColumnInfosByTableName(input.TableName, false);
-        if (_codeGenOptions.BaseEntityNames.Contains(input.BaseClassName, StringComparer.OrdinalIgnoreCase))
-            dbColumnInfos = dbColumnInfos.Where(c => !dbColumnNames.Contains(CodeGenUtil.CamelColumnName(c.DbColumnName, dbColumnNames), StringComparer.OrdinalIgnoreCase)).ToList();
-        dbColumnInfos.ForEach(m =>
+            ColumnDescription = input.ColumnDescription,
+            DbColumnName = input.DbColumnName,
+            IsIdentity = input.IsIdentity == 1,
+            IsNullable = input.IsNullable == 1,
+            IsPrimarykey = input.IsPrimarykey == 1,
+            Length = input.Length,
+            DecimalDigits = input.DecimalDigits,
+            DataType = input.DataType
+        };
+        var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
+        db.DbMaintenance.AddColumn(input.TableName, column);
+        db.DbMaintenance.AddColumnRemark(input.DbColumnName, input.TableName, input.ColumnDescription);
+        if (column.IsPrimarykey)
+            db.DbMaintenance.AddPrimaryKey(input.TableName, input.DbColumnName);
+    }
+
+    /// <summary>
+    /// 删除列
+    /// </summary>
+    /// <param name="input"></param>
+    [HttpPost("/sysDatabase/deleteColumn")]
+    public void DeleteColumn(DeleteDbColumnInput input)
+    {
+        var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
+        db.DbMaintenance.DropColumn(input.TableName, input.DbColumnName);
+    }
+
+    /// <summary>
+    /// 编辑列
+    /// </summary>
+    /// <param name="input"></param>
+    [HttpPost("/sysDatabase/updateColumn")]
+    public void UpdateColumn(UpdateDbColumnInput input)
+    {
+        var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
+        db.DbMaintenance.RenameColumn(input.TableName, input.OldColumnName, input.ColumnName);
+        if (db.DbMaintenance.IsAnyColumnRemark(input.ColumnName, input.TableName))
+            db.DbMaintenance.DeleteColumnRemark(input.ColumnName, input.TableName);
+        db.DbMaintenance.AddColumnRemark(input.ColumnName, input.TableName, string.IsNullOrWhiteSpace(input.Description) ? input.ColumnName : input.Description);
+    }
+
+    /// <summary>
+    /// 获取表列表
+    /// </summary>
+    /// <param name="configId">ConfigId</param>
+    /// <returns></returns>
+    [HttpGet("/sysDatabase/tableList")]
+    public List<DbTableInfo> GetTableList(string configId = SqlSugarConst.ConfigId)
+    {
+        var db = _db.AsTenant().GetConnectionScope(configId);
+        return db.DbMaintenance.GetTableInfoList(false);
+    }
+
+    /// <summary>
+    /// 增加表
+    /// </summary>
+    /// <param name="input"></param>
+    [HttpPost("/sysDatabase/addTable")]
+    public void AddTable(DbTableInput input)
+    {
+        var columns = new List<DbColumnInfo>();
+        if (input.DbColumnInfoList == null || !input.DbColumnInfoList.Any())
+            throw Oops.Oh(ErrorCodeEnum.db1000);
+
+        if (input.DbColumnInfoList.GroupBy(q => q.DbColumnName).Any(q => q.Count() > 1))
+            throw Oops.Oh(ErrorCodeEnum.db1002);
+
+        var config = App.GetOptions<DbConnectionOptions>().ConnectionConfigs.FirstOrDefault(u => u.ConfigId == input.ConfigId);
+
+        input.DbColumnInfoList.ForEach(m =>
         {
-            m.DbColumnName = CodeGenUtil.CamelColumnName(m.DbColumnName, dbColumnNames);
-            m.DataType = CodeGenUtil.ConvertDataType(m);
-        });
-        var tContent = File.ReadAllText(templatePath);
-        var tResult = _viewEngine.RunCompileFromCached(tContent, new
-        {
-            NameSpace = $"{input.Position}.Entity",
-            input.TableName,
-            input.EntityName,
-            BaseClassName = string.IsNullOrWhiteSpace(input.BaseClassName) ? "" : $" : {input.BaseClassName}",
-            input.ConfigId,
-            dbTableInfo.Description,
-            TableField = dbColumnInfos
-        });
-        File.WriteAllText(targetPath, tResult, Encoding.UTF8);
-    }
-
-    /// <summary>
-    /// 获取实体模板文件路径
-    /// </summary>
-    /// <returns></returns>
-    private static string GetEntityTemplatePath()
-    {
-        var templatePath = App.WebHostEnvironment.WebRootPath + @"\Template\";
-        return Path.Combine(templatePath, "Entity.cs.vm");
-    }
-
-    /// <summary>
-    /// 设置生成实体文件路径
-    /// </summary>
-    /// <param name="input"></param>
-    /// <returns></returns>
-    private static string GetEntityTargetPath(CreateEntityInput input)
-    {
-        var backendPath = Path.Combine(new DirectoryInfo(App.WebHostEnvironment.ContentRootPath).Parent.FullName, input.Position, "Entity");
-        return Path.Combine(backendPath, input.EntityName + ".cs");
-    }
+            columns.Add(new DbColumnInfo
+            {
+                DbColumnName = config.EnableUnderLine ? UtilMethods.ToUnderLine(m.DbColumnName.Trim()) : m.DbColumnName.Trim(),
+                DataType = m.DataType,
+                Length = m.Length,
+                ColumnDescription = m.ColumnDescription,
+                IsNullable = m.IsNullable == 1,
+                IsIdentity = m.IsIdentity == 1,
+                IsPrimarykey = m.IsPrimarykey == 1,
+                DecimalDigits = m.DecimalDigits
+            });
+        });
+        var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
+        db.DbMaintenance.CreateTable(input.TableName, columns, false);
+
+        if (columns.Any(m => m.IsPrimarykey))
+            db.DbMaintenance.AddPrimaryKey(input.TableName, columns.FirstOrDefault(m => m.IsPrimarykey).DbColumnName);
+
+        if (db.CurrentConnectionConfig.DbType == SqlSugar.DbType.Sqlite || db.CurrentConnectionConfig.DbType == SqlSugar.DbType.MySql)
+            return;
+        db.DbMaintenance.AddTableRemark(input.TableName, input.Description);
+        input.DbColumnInfoList.ForEach(m =>
+        {
+            m.DbColumnName = config.EnableUnderLine ? UtilMethods.ToUnderLine(m.DbColumnName) : m.DbColumnName;
+            db.DbMaintenance.AddColumnRemark(m.DbColumnName, input.TableName, string.IsNullOrWhiteSpace(m.ColumnDescription) ? m.DbColumnName : m.ColumnDescription);
+        });
+    }
+
+    /// <summary>
+    /// 删除表
+    /// </summary>
+    /// <param name="input"></param>
+    [HttpPost("/sysDatabase/deleteTable")]
+    public void DeleteTable(DeleteDbTableInput input)
+    {
+        var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
+        db.DbMaintenance.DropTable(input.TableName);
+    }
+
+    /// <summary>
+    /// 编辑表
+    /// </summary>
+    /// <param name="input"></param>
+    [HttpPost("/sysDatabase/updateTable")]
+    public void UpdateTable(UpdateDbTableInput input)
+    {
+        var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
+        db.DbMaintenance.RenameTable(input.OldTableName, input.TableName);
+        if (db.DbMaintenance.IsAnyTableRemark(input.TableName))
+            db.DbMaintenance.DeleteTableRemark(input.TableName);
+        db.DbMaintenance.AddTableRemark(input.TableName, input.Description);
+    }
+
+    /// <summary>
+    /// 创建实体
+    /// </summary>
+    /// <param name="input"></param>
+    [HttpPost("/sysDatabase/createEntity")]
+    public void CreateEntity(CreateEntityInput input)
+    {
+        input.Position = string.IsNullOrWhiteSpace(input.Position) ? "Admin.NET.Application" : input.Position;
+        input.EntityName = (input.EntityName == input.TableName && input.EntityName.Contains('_')) ? CodeGenUtil.CamelColumnName(input.EntityName, null) : input.EntityName;
+        string[] dbColumnNames = _codeGenOptions.EntityBaseColumn[input.BaseClassName];
+
+        var templatePath = GetEntityTemplatePath();
+        var targetPath = GetEntityTargetPath(input);
+        var db = _db.AsTenant().GetConnectionScope(input.ConfigId);
+        DbTableInfo dbTableInfo = db.DbMaintenance.GetTableInfoList(false).FirstOrDefault(m => m.Name == input.TableName);
+        if (dbTableInfo == null)
+            throw Oops.Oh(ErrorCodeEnum.db1001);
+        List<DbColumnInfo> dbColumnInfos = db.DbMaintenance.GetColumnInfosByTableName(input.TableName, false);
+        if (_codeGenOptions.BaseEntityNames.Contains(input.BaseClassName, StringComparer.OrdinalIgnoreCase))
+            dbColumnInfos = dbColumnInfos.Where(c => !dbColumnNames.Contains(CodeGenUtil.CamelColumnName(c.DbColumnName, dbColumnNames), StringComparer.OrdinalIgnoreCase)).ToList();
+        dbColumnInfos.ForEach(m =>
+        {
+            m.DbColumnName = CodeGenUtil.CamelColumnName(m.DbColumnName, dbColumnNames);
+            m.DataType = CodeGenUtil.ConvertDataType(m);
+        });
+        var tContent = File.ReadAllText(templatePath);
+        var tResult = _viewEngine.RunCompileFromCached(tContent, new
+        {
+            NameSpace = $"{input.Position}.Entity",
+            input.TableName,
+            input.EntityName,
+            BaseClassName = string.IsNullOrWhiteSpace(input.BaseClassName) ? "" : $" : {input.BaseClassName}",
+            input.ConfigId,
+            dbTableInfo.Description,
+            TableField = dbColumnInfos
+        });
+        File.WriteAllText(targetPath, tResult, Encoding.UTF8);
+    }
+
+    /// <summary>
+    /// 获取实体模板文件路径
+    /// </summary>
+    /// <returns></returns>
+    private static string GetEntityTemplatePath()
+    {
+        var templatePath = App.WebHostEnvironment.WebRootPath + @"\Template\";
+        return Path.Combine(templatePath, "Entity.cs.vm");
+    }
+
+    /// <summary>
+    /// 设置生成实体文件路径
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    private static string GetEntityTargetPath(CreateEntityInput input)
+    {
+        var backendPath = Path.Combine(new DirectoryInfo(App.WebHostEnvironment.ContentRootPath).Parent.FullName, input.Position, "Entity");
+        return Path.Combine(backendPath, input.EntityName + ".cs");
+    }
 }

+ 0 - 2
Admin.NET/Admin.NET.Core/Service/Dict/Dto/DictDataInput.cs

@@ -26,12 +26,10 @@ public class PageDictDataInput : BasePageInput
     public string Code { get; set; }
 }
 
-[NotTable]
 public class AddDictDataInput : SysDictData
 {
 }
 
-[NotTable]
 public class UpdateDictDataInput : AddDictDataInput
 {
 }

+ 0 - 2
Admin.NET/Admin.NET.Core/Service/Dict/Dto/DictTypeInput.cs

@@ -21,12 +21,10 @@ public class PageDictTypeInput : BasePageInput
     public string Code { get; set; }
 }
 
-[NotTable]
 public class AddDictTypeInput : SysDictType
 {
 }
 
-[NotTable]
 public class UpdateDictTypeInput : AddDictTypeInput
 {
 }

+ 0 - 2
Admin.NET/Admin.NET.Core/Service/Job/Dto/JobDetailInput.cs

@@ -21,7 +21,6 @@ public class PageJobInput : BasePageInput
     public string Description { get; set; }
 }
 
-[NotTable]
 public class AddJobDetailInput : SysJobDetail
 {
     /// <summary>
@@ -31,7 +30,6 @@ public class AddJobDetailInput : SysJobDetail
     public override string JobId { get; set; }
 }
 
-[NotTable]
 public class UpdateJobDetailInput : AddJobDetailInput
 {
 }

+ 0 - 2
Admin.NET/Admin.NET.Core/Service/Job/Dto/JobTriggerInput.cs

@@ -13,7 +13,6 @@ public class JobTriggerInput
     public string TriggerId { get; set; }
 }
 
-[NotTable]
 public class AddJobTriggerInput : SysJobTrigger
 {
     /// <summary>
@@ -29,7 +28,6 @@ public class AddJobTriggerInput : SysJobTrigger
     public override string TriggerId { get; set; }
 }
 
-[NotTable]
 public class UpdateJobTriggerInput : AddJobTriggerInput
 {
 }

+ 0 - 2
Admin.NET/Admin.NET.Core/Service/Menu/Dto/MenuInput.cs

@@ -13,7 +13,6 @@ public class MenuInput
     public MenuTypeEnum Type { get; set; }
 }
 
-[NotTable]
 public class AddMenuInput : SysMenu
 {
     /// <summary>
@@ -23,7 +22,6 @@ public class AddMenuInput : SysMenu
     public override string Title { get; set; }
 }
 
-[NotTable]
 public class UpdateMenuInput : AddMenuInput
 {
 }

+ 0 - 2
Admin.NET/Admin.NET.Core/Service/Notice/Dto/NoticeInput.cs

@@ -13,12 +13,10 @@ public class PageNoticeInput : BasePageInput
     public virtual NoticeTypeEnum Type { get; set; }
 }
 
-[NotTable]
 public class AddNoticeInput : SysNotice
 {
 }
 
-[NotTable]
 public class UpdateNoticeInput : AddNoticeInput
 {
 }

+ 0 - 2
Admin.NET/Admin.NET.Core/Service/Org/Dto/OrgInput.cs

@@ -13,7 +13,6 @@ public class OrgInput : BaseIdInput
     public string Code { get; set; }
 }
 
-[NotTable]
 public class AddOrgInput : SysOrg
 {
     /// <summary>
@@ -23,7 +22,6 @@ public class AddOrgInput : SysOrg
     public override string Name { get; set; }
 }
 
-[NotTable]
 public class UpdateOrgInput : AddOrgInput
 {
 }

+ 0 - 2
Admin.NET/Admin.NET.Core/Service/Pos/Dto/PosInput.cs

@@ -13,7 +13,6 @@ public class PosInput
     public string Code { get; set; }
 }
 
-[NotTable]
 public class AddPosInput : SysPos
 {
     /// <summary>
@@ -23,7 +22,6 @@ public class AddPosInput : SysPos
     public override string Name { get; set; }
 }
 
-[NotTable]
 public class UpdatePosInput : AddPosInput
 {
 }

+ 0 - 2
Admin.NET/Admin.NET.Core/Service/Region/Dto/RegionInput.cs

@@ -22,7 +22,6 @@ public class RegionInput : BaseIdInput
 {
 }
 
-[NotTable]
 public class AddRegionInput : SysRegion
 {
     /// <summary>
@@ -32,7 +31,6 @@ public class AddRegionInput : SysRegion
     public override string Name { get; set; }
 }
 
-[NotTable]
 public class UpdateRegionInput : AddRegionInput
 {
 }

+ 0 - 2
Admin.NET/Admin.NET.Core/Service/Role/Dto/RoleInput.cs

@@ -21,7 +21,6 @@ public class PageRoleInput : BasePageInput
     public virtual string Code { get; set; }
 }
 
-[NotTable]
 public class AddRoleInput : SysRole
 {
     /// <summary>
@@ -36,7 +35,6 @@ public class AddRoleInput : SysRole
     public List<long> MenuIdList { get; set; }
 }
 
-[NotTable]
 public class UpdateRoleInput : AddRoleInput
 {
 }

+ 0 - 2
Admin.NET/Admin.NET.Core/Service/Tenant/Dto/TenantInput.cs

@@ -21,7 +21,6 @@ public class PageTenantInput : BasePageInput
     public virtual string Phone { get; set; }
 }
 
-[NotTable]
 public class AddTenantInput : TenantOutput
 {
     /// <summary>
@@ -37,7 +36,6 @@ public class AddTenantInput : TenantOutput
     public override string AdminName { get; set; }
 }
 
-[NotTable]
 public class UpdateTenantInput : AddTenantInput
 {
 }

+ 0 - 2
Admin.NET/Admin.NET.Core/Service/User/Dto/UserInput.cs

@@ -31,7 +31,6 @@ public class PageUserInput : BasePageInput
     public long OrgId { get; set; }
 }
 
-[NotTable]
 public class AddUserInput : SysUser
 {
     /// <summary>
@@ -57,7 +56,6 @@ public class AddUserInput : SysUser
     public List<SysUserExtOrg> ExtOrgIdList { get; set; }
 }
 
-[NotTable]
 public class UpdateUserInput : AddUserInput
 {
 }

+ 1 - 1
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarRepository.cs

@@ -13,7 +13,7 @@ public class SqlSugarRepository<T> : SimpleClient<T> where T : class, new()
         iTenant = App.GetRequiredService<ISqlSugarClient>().AsTenant();
 
         // 根据租户业务实体是否切库
-        if (typeof(T).IsDefined(typeof(TenantBusinessAttribute), false))
+        if (!typeof(T).IsDefined(typeof(SystemTableAttribute), false))
         {
             var tenantId = App.GetRequiredService<UserManager>().TenantId; // 根据租户Id切库
 

+ 4 - 6
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs

@@ -196,8 +196,7 @@ public static class SqlSugarSetup
             dbProvider.DbMaintenance.CreateDatabase();
 
         // 获取所有实体表-初始化表结构
-        var entityTypes = App.EffectiveTypes.Where(u => !u.IsInterface && !u.IsAbstract && u.IsClass
-            && u.IsDefined(typeof(SugarTable), false) && !u.IsDefined(typeof(NotTableAttribute), false));
+        var entityTypes = App.EffectiveTypes.Where(u => !u.IsInterface && !u.IsAbstract && u.IsClass && u.IsDefined(typeof(SugarTable), false));
         if (!entityTypes.Any()) return;
         foreach (var entityType in entityTypes)
         {
@@ -251,8 +250,7 @@ public static class SqlSugarSetup
 
         // 获取所有实体表-初始化租户业务表
         var entityTypes = App.EffectiveTypes.Where(u => !u.IsInterface && !u.IsAbstract && u.IsClass
-            && u.IsDefined(typeof(SugarTable), false) && !u.IsDefined(typeof(NotTableAttribute), false)
-            && u.IsDefined(typeof(TenantBusinessAttribute), false));
+            && u.IsDefined(typeof(SugarTable), false) && !u.IsDefined(typeof(SystemTableAttribute), false));
         if (!entityTypes.Any()) return;
         foreach (var entityType in entityTypes)
         {
@@ -327,8 +325,8 @@ public static class SqlSugarSetup
             foreach (var entityType in entityTypes)
             {
                 // 获取库隔离租户业务实体
-                var tenantBusinessAtt = entityType.GetCustomAttribute<TenantBusinessAttribute>();
-                if (tenantBusinessAtt == null)
+                var systemTableAtt = entityType.GetCustomAttribute<SystemTableAttribute>();
+                if (systemTableAtt != null)
                 {
                     // 排除非当前数据库实体
                     var tenantAtt = entityType.GetCustomAttribute<TenantAttribute>();