From 987da09af385b3ff5ff2bfbaee3e531372904373 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Tue, 23 Jan 2024 05:23:04 +0800 Subject: [PATCH] Update crosss database query bug --- .../QueryableProvider/NavigatManager.cs | 13 +++++++----- .../Infrastructure/InstanceFactory.cs | 21 +++++++++++++++++++ 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs index ca344375e..63bf069bd 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs @@ -248,7 +248,7 @@ namespace SqlSugar if (sql.SelectString == null) { var columns = bEntityInfo.Columns.Where(it => !it.IsIgnore) - .Select(it => GetOneToManySelectByColumnInfo(it)).ToList(); + .Select(it => GetOneToManySelectByColumnInfo(it,abDb)).ToList(); sql.SelectString = String.Join(",", columns); } var bList = selector(bDb.Queryable().AS(bEntityInfo.DbTableName).ClearFilter(QueryBuilder.RemoveFilters).Filter(this.QueryBuilder?.IsDisabledGobalFilter == true ? null : bEntityInfo.Type).AddParameters(sql.Parameters).Where(conditionalModels2).WhereIF(sql.WhereString.HasValue(),sql.WhereString).Select(sql.SelectString).OrderByIF(sql.OrderByString.HasValue(),sql.OrderByString)); @@ -369,7 +369,7 @@ namespace SqlSugar if (sqlObj.SelectString == null) { var columns = navEntityInfo.Columns.Where(it => !it.IsIgnore) - .Select(it => GetOneToOneSelectByColumnInfo(it)).ToList(); + .Select(it => GetOneToOneSelectByColumnInfo(it,db)).ToList(); sqlObj.SelectString = String.Join(",", columns); } var navList = selector(db.Queryable().ClearFilter(QueryBuilder.RemoveFilters).Filter((navPkColumn.IsPrimarykey&& navPkCount==1) ? null : this.QueryBuilder?.IsDisabledGobalFilter == true ? null : navEntityInfo.Type).AS(GetDbTableName(navEntityInfo)) @@ -447,7 +447,7 @@ namespace SqlSugar if (sqlObj.SelectString == null) { var columns = navEntityInfo.Columns.Where(it => !it.IsIgnore) - .Select(it => GetOneToManySelectByColumnInfo(it)).ToList(); + .Select(it => GetOneToManySelectByColumnInfo(it,childDb)).ToList(); sqlObj.SelectString = String.Join(",", columns); } var navList = selector(childDb.Queryable(sqlObj.TableShortName).AS(GetDbTableName(navEntityInfo)).ClearFilter(QueryBuilder.RemoveFilters).Filter(this.QueryBuilder?.IsDisabledGobalFilter == true ? null : navEntityInfo.Type).AddParameters(sqlObj.Parameters).Where(conditionalModels).WhereIF(sqlObj.WhereString.HasValue(), sqlObj.WhereString).WhereIF(navObjectNameColumnInfo?.Navigat?.WhereSql!=null, navObjectNameColumnInfo?.Navigat?.WhereSql).Select(sqlObj.SelectString).OrderByIF(sqlObj.OrderByString.HasValue(), sqlObj.OrderByString)); @@ -937,21 +937,24 @@ namespace SqlSugar } } - private string GetOneToManySelectByColumnInfo(EntityColumnInfo it) + private string GetOneToManySelectByColumnInfo(EntityColumnInfo it,ISqlSugarClient db) { + QueryBuilder QueryBuilder =InstanceFactory.GetQueryBuilderWithContext(db); if (it.QuerySql.HasValue()) { return it.QuerySql + " AS " + QueryBuilder.Builder.GetTranslationColumnName(it.PropertyName); } return QueryBuilder.Builder.GetTranslationColumnName(it.DbColumnName) + " AS " + QueryBuilder.Builder.GetTranslationColumnName(it.PropertyName); } - private string GetOneToOneSelectByColumnInfo(EntityColumnInfo it) + private string GetOneToOneSelectByColumnInfo(EntityColumnInfo it,ISqlSugarClient db) { + QueryBuilder QueryBuilder = InstanceFactory.GetQueryBuilderWithContext(db); if (it.QuerySql.HasValue()) { return it.QuerySql + " AS " + QueryBuilder.Builder.GetTranslationColumnName(it.PropertyName); } return QueryBuilder.Builder.GetTranslationColumnName(it.DbColumnName) + " AS " + QueryBuilder.Builder.GetTranslationColumnName(it.PropertyName); } + } } diff --git a/Src/Asp.Net/SqlSugar/Infrastructure/InstanceFactory.cs b/Src/Asp.Net/SqlSugar/Infrastructure/InstanceFactory.cs index 771a3bae4..58720627f 100644 --- a/Src/Asp.Net/SqlSugar/Infrastructure/InstanceFactory.cs +++ b/Src/Asp.Net/SqlSugar/Infrastructure/InstanceFactory.cs @@ -154,6 +154,27 @@ namespace SqlSugar #endregion + public static QueryBuilder GetQueryBuilderWithContext(ISqlSugarClient db) + { + if (db is SqlSugarClient) + { + db = (db as SqlSugarClient).Context; + } + else if (db is SqlSugarScope) + { + db = (db as SqlSugarScope).ScopedContext.Context; + } + if (!(db is SqlSugarProvider)) + { + db = new SqlSugarClient(db.CurrentConnectionConfig).Context; + } + var QueryBuilder = InstanceFactory.GetQueryBuilder(db.CurrentConnectionConfig); + QueryBuilder.Context = (SqlSugarProvider)db; + QueryBuilder.Builder = InstanceFactory.GetSqlbuilder(db.CurrentConnectionConfig); + QueryBuilder.Builder.Context = (SqlSugarProvider)db; + return QueryBuilder; + } + public static QueryBuilder GetQueryBuilder(ConnectionConfig currentConnectionConfig) { if (currentConnectionConfig.DbType == DbType.SqlServer)