diff --git a/OpenAuth.App/BuilderTable/BuilderTableApp.cs b/OpenAuth.App/BuilderTable/BuilderTableApp.cs index 9fa4b98e..7012b959 100644 --- a/OpenAuth.App/BuilderTable/BuilderTableApp.cs +++ b/OpenAuth.App/BuilderTable/BuilderTableApp.cs @@ -137,7 +137,9 @@ namespace OpenAuth.App obj.CreateUserId = user.Id; obj.CreateUserName = user.Name; UnitWork.Add(obj); + UnitWork.Save(); //需要先保存表结构,后面才能正常判定 + _dbExtension.ProcessExternalDb(obj.Id); //先处理外部数据库连接 var columns = _dbExtension.GetDbTableStructure(obj.TableName); if (!columns.Any()) { diff --git a/OpenAuth.App/BuilderTable/BuilderTableColumnApp.cs b/OpenAuth.App/BuilderTable/BuilderTableColumnApp.cs index f5ba8695..d2e7de39 100644 --- a/OpenAuth.App/BuilderTable/BuilderTableColumnApp.cs +++ b/OpenAuth.App/BuilderTable/BuilderTableColumnApp.cs @@ -82,17 +82,7 @@ namespace OpenAuth.App /// public void Sync(SyncStructureReq req) { - var builderTable = SugarClient.Queryable().First(u => u.Id == req.BuilderTableId); - if (builderTable != null) - { - //如果代码生成器配置了外部数据库连接,则使用外部数据库连接 - var connection = SugarClient.Queryable().First(u => u.Id == builderTable.ExternalDataSourceId); - if (connection != null) - { - var dbType = connection.Dbtype; - _dbExtension.SetConnection(connection.Connectionstring, dbType); - } - } + _dbExtension.ProcessExternalDb(req.Id); //先处理外部数据库连接 var columns = _dbExtension.GetDbTableStructure(req.TableName); if (!columns.Any()) { diff --git a/OpenAuth.App/BuilderTable/Request/SyncStructureReq.cs b/OpenAuth.App/BuilderTable/Request/SyncStructureReq.cs index 6d506edd..a05d5393 100644 --- a/OpenAuth.App/BuilderTable/Request/SyncStructureReq.cs +++ b/OpenAuth.App/BuilderTable/Request/SyncStructureReq.cs @@ -15,17 +15,10 @@ namespace OpenAuth.App.Request /// public class SyncStructureReq { - /// - /// 列ID - /// Id为空则为添加 - /// - public string Id { get; set; } - - /// /// 代码生成器主表ID /// - public string BuilderTableId { get; set; } + public string Id { get; set; } /// /// 表英文全称 diff --git a/OpenAuth.App/DbExtension.cs b/OpenAuth.App/DbExtension.cs index af8c4ecc..b09212bc 100644 --- a/OpenAuth.App/DbExtension.cs +++ b/OpenAuth.App/DbExtension.cs @@ -19,6 +19,7 @@ namespace OpenAuth.App public class DbExtension { protected ISqlSugarClient SugarClient; + private string _dbTypeStr; private IOptions _appConfiguration; private IHttpContextAccessor _httpContextAccessor; @@ -84,16 +85,20 @@ namespace OpenAuth.App /// public IList GetDbTableStructure(string tableName) { - var dbtype = _appConfiguration.Value.DbTypes[_httpContextAccessor.GetTenantId()]; - if (dbtype == Define.DBTYPE_MYSQL) + //如果是空,说明没有通过ProcessExternalDb设置过,直接从本地读取 + if(string.IsNullOrEmpty(_dbTypeStr)){ + _dbTypeStr = _appConfiguration.Value.DbTypes[_httpContextAccessor.GetTenantId()]; + } + + if (_dbTypeStr == Define.DBTYPE_MYSQL) { return GetMySqlStructure(tableName); } - else if (dbtype == Define.DBTYPE_SQLSERVER) + else if (_dbTypeStr == Define.DBTYPE_SQLSERVER) { return GetSqlServerStructure(tableName); } - else if (dbtype == Define.DBTYPE_PostgreSQL) + else if (_dbTypeStr == Define.DBTYPE_PostgreSQL) { return GetPostgreStructure(tableName); } @@ -409,13 +414,49 @@ namespace OpenAuth.App return new List(); } + /// + /// 处理外部数据库 + /// + /// 代码生成器表ID + public void ProcessExternalDb(string buildertableId){ + var builderTable = SugarClient.Queryable().First(u => u.Id == buildertableId); + if (builderTable != null) + { + //如果代码生成器配置了外部数据库连接,则使用外部数据库连接 + var connection = SugarClient.Queryable().First(u => u.Id == builderTable.ExternalDataSourceId); + if (connection != null) + { + var dbType = connection.Dbtype; + SetConnection(connection.Connectionstring, dbType); + } + } + } + /// /// 设置数据库连接 /// /// 数据库连接字符串 /// 数据库类型 - public void SetConnection(string connectionString, int? dbType) + private void SetConnection(string connectionString, int? dbType) { + switch ((SqlSugar.DbType)dbType) + { + case SqlSugar.DbType.MySql: + _dbTypeStr = Define.DBTYPE_MYSQL; + break; + case SqlSugar.DbType.SqlServer: + _dbTypeStr = Define.DBTYPE_SQLSERVER; + break; + case SqlSugar.DbType.Oracle: + _dbTypeStr = Define.DBTYPE_ORACLE; + break; + case SqlSugar.DbType.PostgreSQL: + _dbTypeStr = Define.DBTYPE_PostgreSQL; + break; + default: + _dbTypeStr = Define.DBTYPE_MYSQL; + break; + } var config = new ConnectionConfig { ConnectionString = connectionString,