Synchronization code

This commit is contained in:
sunkaixuan 2024-03-28 12:09:05 +08:00
parent fda15922ff
commit d8f93b2ae6
2 changed files with 28 additions and 6 deletions

View File

@ -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<T>();
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<T> entytyList = this.Context.Utilities.GetReflectionInoCacheInstance().GetOrCreate("cacheKey", () =>
{
var cacheResult = new IDataReaderEntityBuilder<T>(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<T>();
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<T> entytyList = this.Context.Utilities.GetReflectionInoCacheInstance().GetOrCreate("cacheKey", () =>
{
var cacheResult = new IDataReaderEntityBuilder<T>(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)

View File

@ -18,6 +18,28 @@ namespace SqlSugar
{
public class UtilMethods
{
public static List<Tuple<string, Type>> GetColumnInfo(IDataReader reader)
{
var columnInfo = new List<Tuple<string, Type>>();
// 获取列的数量
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<object> sourceList)
{
// 创建 List<Type> 类型的实例