From d8f93b2ae6e7013e6363dfd49b6efb99449b5844 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Thu, 28 Mar 2024 12:09:05 +0800 Subject: [PATCH] Synchronization code --- .../QueryableProvider/QueryableExecuteSql.cs | 12 +++++----- Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs | 22 +++++++++++++++++++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSql.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSql.cs index 864281b68..38afaa4f4 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSql.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSql.cs @@ -647,12 +647,12 @@ namespace SqlSugar var sql = queryable.ToSql(); var dr = this.Context.Ado.GetDataReader(sql.Key,sql.Value); var entityInfo = this.Context.EntityMaintenance.GetEntityInfo(); - var columns = entityInfo.Columns.Where(it => it.IsIgnore == false).ToList(); - var cacheKey = "ForEachDataReader"+typeof(T).GetHashCode()+string.Join(",", columns.Select(it => it.PropertyName)); + var columns = UtilMethods.GetColumnInfo(dr); + var cacheKey = "ForEachDataReader"+typeof(T).GetHashCode()+string.Join(",", columns.Select(it => it.Item1+it.Item2.Name+"_")); IDataReaderEntityBuilder entytyList = this.Context.Utilities.GetReflectionInoCacheInstance().GetOrCreate("cacheKey", () => { var cacheResult = new IDataReaderEntityBuilder(this.Context, dr, - columns.Select(it=>it.DbColumnName).ToList()).CreateBuilder(typeof(T)); + columns.Select(it=>it.Item1).ToList()).CreateBuilder(typeof(T)); return cacheResult; }); using (dr) @@ -675,12 +675,12 @@ namespace SqlSugar var sql = queryable.ToSql(); var dr =await this.Context.Ado.GetDataReaderAsync(sql.Key, sql.Value); var entityInfo = this.Context.EntityMaintenance.GetEntityInfo(); - var columns = entityInfo.Columns.Where(it => it.IsIgnore == false).ToList(); - var cacheKey = "ForEachDataReader" + typeof(T).GetHashCode() + string.Join(",", columns.Select(it => it.PropertyName)); + var columns = UtilMethods.GetColumnInfo(dr); + var cacheKey = "ForEachDataReader" + typeof(T).GetHashCode() + string.Join(",", columns.Select(it => it.Item1 + it.Item2.Name + "_")); IDataReaderEntityBuilder entytyList = this.Context.Utilities.GetReflectionInoCacheInstance().GetOrCreate("cacheKey", () => { var cacheResult = new IDataReaderEntityBuilder(this.Context, dr, - columns.Select(it => it.DbColumnName).ToList()).CreateBuilder(typeof(T)); + columns.Select(it => it.Item1).ToList()).CreateBuilder(typeof(T)); return cacheResult; }); using (dr) diff --git a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs index 3136d884e..3c977405c 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs +++ b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs @@ -18,6 +18,28 @@ namespace SqlSugar { public class UtilMethods { + public static List> GetColumnInfo(IDataReader reader) + { + var columnInfo = new List>(); + + // 获取列的数量 + int columnCount = reader.FieldCount; + + // 遍历每一列 + for (int i = 0; i < columnCount; i++) + { + // 获取列名 + string columnName = reader.GetName(i); + + // 获取列的数据类型 + Type columnType = reader.GetFieldType(i); + + // 将列名和类型添加到列表中 + columnInfo.Add(Tuple.Create(columnName, columnType)); + } + + return columnInfo; + } public static object ConvertToObjectList(Type targetType, List sourceList) { // 创建 List 类型的实例