diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs index c6c8b0b44..949be3aa4 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs @@ -1528,7 +1528,7 @@ namespace SqlSugar asyncQueryableBuilder.SelectValue = this.QueryBuilder.SelectValue; asyncQueryableBuilder.WhereInfos = this.Context.Utilities.TranslateCopy(this.QueryBuilder.WhereInfos); asyncQueryableBuilder.EasyJoinInfos = this.Context.Utilities.TranslateCopy(this.QueryBuilder.EasyJoinInfos); - asyncQueryableBuilder.JoinQueryInfos = this.Context.Utilities.TranslateCopy(this.QueryBuilder.JoinQueryInfos); + asyncQueryableBuilder.JoinQueryInfos = QueryBuilder.JoinQueryInfos.Select(it => CopyJoinInfo(it)).ToList(); asyncQueryableBuilder.WhereIndex = this.QueryBuilder.WhereIndex; asyncQueryableBuilder.EntityType = this.QueryBuilder.EntityType; asyncQueryableBuilder.EntityName = this.QueryBuilder.EntityName; @@ -1553,11 +1553,25 @@ namespace SqlSugar asyncQueryableBuilder.OldSql = this.QueryBuilder.OldSql; asyncQueryableBuilder.IsCrossQueryWithAttr = this.QueryBuilder.IsCrossQueryWithAttr; asyncQueryableBuilder.CrossQueryItems = this.QueryBuilder.CrossQueryItems; - asyncQueryableBuilder.SubToListParameters= this.Context.Utilities.TranslateCopy(this.QueryBuilder.SubToListParameters); + asyncQueryableBuilder.SubToListParameters = this.Context.Utilities.TranslateCopy(this.QueryBuilder.SubToListParameters); asyncQueryableBuilder.AppendColumns = this.Context.Utilities.TranslateCopy(this.QueryBuilder.AppendColumns); asyncQueryableBuilder.AppendValues = this.Context.Utilities.TranslateCopy(this.QueryBuilder.AppendValues); asyncQueryableBuilder.RemoveFilters = this.QueryBuilder.RemoveFilters?.ToArray(); } + + private static JoinQueryInfo CopyJoinInfo(JoinQueryInfo it) + { + return new JoinQueryInfo() + { + EntityType = it.EntityType, + JoinIndex = it.JoinIndex, + JoinType = it.JoinType, + JoinWhere = it.JoinWhere, + ShortName = it.ShortName, + TableName = it.TableName + }; + } + protected int SetCacheTime(int cacheDurationInSeconds) { if (cacheDurationInSeconds == int.MaxValue && this.Context.CurrentConnectionConfig.MoreSettings != null && this.Context.CurrentConnectionConfig.MoreSettings.DefaultCacheDurationInSeconds > 0) diff --git a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs index 06f97b449..e5be6137a 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs @@ -327,7 +327,10 @@ namespace SqlSugar string shortName = string.Empty; List paramters = new List(); queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = this.GetJoinInfos(queryable.SqlBuilder, joinExpression, ref paramters, ref shortName, types); - queryable.SqlBuilder.QueryBuilder.JoinQueryInfos.Last().EntityType = types.Last(); + if (queryable.SqlBuilder.QueryBuilder.JoinQueryInfos.Any()) + { + queryable.SqlBuilder.QueryBuilder.JoinQueryInfos.Last().EntityType = types.Last(); + } queryable.SqlBuilder.QueryBuilder.TableShortName = shortName; queryable.SqlBuilder.QueryBuilder.JoinExpression = joinExpression; if (paramters != null) diff --git a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs index 338260c5f..accbbd745 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs @@ -1561,6 +1561,14 @@ namespace SqlSugar }; return result; } + public SplitTableContext SplitHelper(Type entityType) + { + var result = new SplitTableContext(this.Context) + { + EntityInfo = this.Context.EntityMaintenance.GetEntityInfo(entityType) + }; + return result; + } public SplitTableContextResult SplitHelper(T data) where T : class, new() { var result = new SplitTableContext(this.Context) diff --git a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs index 0c99a1683..4e9919934 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarScopeProvider.cs @@ -689,6 +689,10 @@ namespace SqlSugar { return ScopedContext.SplitHelper(); } + public SplitTableContext SplitHelper(Type entityType) + { + return ScopedContext.SplitHelper(entityType); + } public SplitTableContextResult SplitHelper(T data) where T : class, new() { return ScopedContext.SplitHelper(data); diff --git a/Src/Asp.Net/SqlSugar/Interface/ISqlSugarClient.cs b/Src/Asp.Net/SqlSugar/Interface/ISqlSugarClient.cs index 757789d23..4364af324 100644 --- a/Src/Asp.Net/SqlSugar/Interface/ISqlSugarClient.cs +++ b/Src/Asp.Net/SqlSugar/Interface/ISqlSugarClient.cs @@ -50,6 +50,7 @@ namespace SqlSugar SqlSugarClient CopyNew(); T CreateContext(bool isTran=true) where T : SugarUnitOfWork, new(); SugarUnitOfWork CreateContext(bool isTran = true); + SplitTableContext SplitHelper(Type entityType); SplitTableContext SplitHelper() where T : class, new(); SplitTableContextResult SplitHelper(T data) where T : class, new(); SplitTableContextResult SplitHelper(List data) where T : class, new(); diff --git a/Src/Asp.Net/SqlSugar/SqlSugarClient.cs b/Src/Asp.Net/SqlSugar/SqlSugarClient.cs index d07182607..58a25ead0 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugarClient.cs +++ b/Src/Asp.Net/SqlSugar/SqlSugarClient.cs @@ -1181,6 +1181,10 @@ namespace SqlSugar { return this.Context.SplitHelper(); } + public SplitTableContext SplitHelper(Type entityType) + { + return this.Context.SplitHelper(entityType); + } public SplitTableContextResult SplitHelper(T data) where T : class, new() { return this.Context.SplitHelper(data); diff --git a/Src/Asp.Net/SqlSugar/SqlSugarScope.cs b/Src/Asp.Net/SqlSugar/SqlSugarScope.cs index 23dfc8428..0035cd915 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugarScope.cs +++ b/Src/Asp.Net/SqlSugar/SqlSugarScope.cs @@ -685,6 +685,10 @@ namespace SqlSugar { return ScopedContext.SplitHelper(); } + public SplitTableContext SplitHelper(Type entityType) + { + return ScopedContext.SplitHelper(entityType); + } public SplitTableContextResult SplitHelper(T data) where T : class, new() { return ScopedContext.SplitHelper(data);