From 6be9aff42a7d4bab3f6c369b3556a4b281d33a11 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sat, 25 Nov 2023 01:45:04 +0800 Subject: [PATCH] Synchronization code --- .../Abstract/DbMaintenanceProvider/Methods.cs | 4 +++ .../DbMaintenance/SqlServerDbMaintenance.cs | 28 +++++++++++-------- .../SqlSugar/SpliteTable/SplitTableContext.cs | 10 +++++-- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs index 3264c2d05..e142b14a6 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs @@ -665,6 +665,10 @@ namespace SqlSugar #endregion #region Private + public virtual List GetSchemaTables(EntityInfo entityInfo) + { + return null; + } protected List GetListOrCache(string cacheKey, string sql) { return this.Context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(cacheKey, diff --git a/Src/Asp.NetCore2/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs b/Src/Asp.NetCore2/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs index 48e07b06a..edbe0143c 100644 --- a/Src/Asp.NetCore2/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs +++ b/Src/Asp.NetCore2/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs @@ -321,21 +321,27 @@ namespace SqlSugar #endregion #region Methods - public override bool DropColumn(string tableName, string columnName) + public override List GetSchemaTables(EntityInfo entityInfo) { - if (Regex.IsMatch(tableName,@"^\w+$") && Regex.IsMatch(columnName,@"^\w+$")) - { - var sql = $"SELECT distinct dc.name AS ConstraintName \r\nFROM sys.default_constraints dc\r\nJOIN sys.columns c ON dc.parent_column_id = c.column_id\r\nWHERE dc.parent_object_id = OBJECT_ID('{tableName}')\r\nAND c.name = '{columnName}';"; - var checks=this.Context.Ado.SqlQuery(sql); - foreach (var checkName in checks) + if (entityInfo.DbTableName.Contains(".") && this.Context.CurrentConnectionConfig.DbType == DbType.SqlServer) + { + var schema = entityInfo.DbTableName.Split('.').First(); + var isAny = GetSchemas().Any(it => it.EqualCase(schema))||schema.EqualCase("dbo"); + if (isAny) { - if (checkName?.ToUpper()?.StartsWith("DF__")==true) - { - this.Context.Ado.ExecuteCommand($"ALTER TABLE {SqlBuilder.GetTranslationColumnName(tableName)} DROP CONSTRAINT {checkName}"); - } + var tableInfos = this.Context.Ado.SqlQuery(@"SELECT schem.name+'.'+tb.name Name,tb.Description from + ( SELECT obj.name,Convert(nvarchar(max),prop.value)as Description,obj.schema_id FROM sys.objects obj + LEFT JOIN sys.extended_properties prop + ON obj.object_id=prop.major_id + and prop.minor_id=0 + AND (prop.Name='MS_Description' OR prop.Name is null) + WHERE obj.type IN('U')) tb + inner join sys.schemas as schem + on tb.schema_id=schem.schema_id "); + return tableInfos; } } - return base.DropColumn(tableName, columnName); + return null; } public override List GetDbTypes() { diff --git a/Src/Asp.NetCore2/SqlSugar/SpliteTable/SplitTableContext.cs b/Src/Asp.NetCore2/SqlSugar/SpliteTable/SplitTableContext.cs index 0c913a323..8a7a13db7 100644 --- a/Src/Asp.NetCore2/SqlSugar/SpliteTable/SplitTableContext.cs +++ b/Src/Asp.NetCore2/SqlSugar/SpliteTable/SplitTableContext.cs @@ -58,14 +58,18 @@ namespace SqlSugar } public List GetTables() { - if (StaticConfig.SplitTableGetTablesFunc != null) + if (StaticConfig.SplitTableGetTablesFunc != null) { return StaticConfig.SplitTableGetTablesFunc(); } var oldIsEnableLogEvent = this.Context.Ado.IsEnableLogEvent; this.Context.Ado.IsEnableLogEvent = false; - var tableInfos = this.Context.DbMaintenance.GetTableInfoList(false); - List result = Service.GetAllTables(this.Context,EntityInfo,tableInfos); + List tableInfos =((DbMaintenanceProvider)this.Context.DbMaintenance).GetSchemaTables(EntityInfo); + if (tableInfos == null) + { + tableInfos = this.Context.DbMaintenance.GetTableInfoList(false); + } + List result = Service.GetAllTables(this.Context, EntityInfo, tableInfos); this.Context.Ado.IsEnableLogEvent = oldIsEnableLogEvent; return result; }