diff --git a/Src/Asp.Net/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs b/Src/Asp.Net/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs index 3264c2d05..e142b14a6 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs +++ b/Src/Asp.Net/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.Net/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs b/Src/Asp.Net/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs index fbca40f77..edbe0143c 100644 --- a/Src/Asp.Net/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs +++ b/Src/Asp.Net/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs @@ -321,6 +321,28 @@ namespace SqlSugar #endregion #region Methods + public override List GetSchemaTables(EntityInfo entityInfo) + { + 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) + { + 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 null; + } public override List GetDbTypes() { return this.Context.Ado.SqlQuery(@"SELECT name diff --git a/Src/Asp.Net/SqlSugar/SpliteTable/SplitTableContext.cs b/Src/Asp.Net/SqlSugar/SpliteTable/SplitTableContext.cs index 0c913a323..8a7a13db7 100644 --- a/Src/Asp.Net/SqlSugar/SpliteTable/SplitTableContext.cs +++ b/Src/Asp.Net/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; }