mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-10-15 18:55:07 +08:00
-
This commit is contained in:
@@ -10,10 +10,11 @@ namespace SqlSugar
|
||||
protected List<T> GetEntityList<T>(SqlSugarClient context, IDataReader dataReader, string fields)
|
||||
{
|
||||
Type type = typeof(T);
|
||||
string key = "DataReaderToList." + fields+ dataReader.FieldCount+ context.CurrentConnectionConfig.DbType + type.FullName;
|
||||
IDataReaderEntityBuilder<T> entytyList = context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(key, () =>
|
||||
var fieldNames = GetDataReaderNames(dataReader);
|
||||
string cacheKey = GetCacheKey(type,fieldNames);
|
||||
IDataReaderEntityBuilder<T> entytyList = context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(cacheKey, () =>
|
||||
{
|
||||
var cacheResult = new IDataReaderEntityBuilder<T>(context, dataReader).CreateBuilder(type);
|
||||
var cacheResult = new IDataReaderEntityBuilder<T>(context, dataReader,fieldNames).CreateBuilder(type);
|
||||
return cacheResult;
|
||||
});
|
||||
List<T> result = new List<T>();
|
||||
@@ -32,6 +33,29 @@ namespace SqlSugar
|
||||
return result;
|
||||
}
|
||||
|
||||
private string GetCacheKey(Type type,List<string> keys)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder("DataReaderToList.");
|
||||
sb.Append(type.FullName);
|
||||
sb.Append(".");
|
||||
foreach (var item in keys)
|
||||
{
|
||||
sb.Append(item);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
private List<string> GetDataReaderNames(IDataReader dataReader)
|
||||
{
|
||||
List<string> keys = new List<string>();
|
||||
var count = dataReader.FieldCount;
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
keys.Add(dataReader.GetName(i));
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
|
||||
protected List<T> GetKeyValueList<T>(Type type, IDataReader dataReader)
|
||||
{
|
||||
List<T> reval = new List<T>();
|
||||
@@ -125,7 +149,7 @@ namespace SqlSugar
|
||||
}
|
||||
else if (type.IsEnum)
|
||||
{
|
||||
reval.Add((T)Enum.Parse(type,value.ObjToString()));
|
||||
reval.Add((T)Enum.Parse(type, value.ObjToString()));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -74,12 +74,12 @@ namespace SqlSugar
|
||||
|
||||
}
|
||||
|
||||
public IDataReaderEntityBuilder(SqlSugarClient context, IDataRecord dataRecord)
|
||||
public IDataReaderEntityBuilder(SqlSugarClient context, IDataRecord dataRecord,List<string> fieldNames)
|
||||
{
|
||||
this.Context = context;
|
||||
this.DataRecord = dataRecord;
|
||||
this.DynamicBuilder = new IDataReaderEntityBuilder<T>();
|
||||
this.ReaderKeys = new List<string>();
|
||||
this.ReaderKeys = fieldNames;
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -91,10 +91,6 @@ namespace SqlSugar
|
||||
|
||||
public IDataReaderEntityBuilder<T> CreateBuilder(Type type)
|
||||
{
|
||||
for (int i = 0; i < this.DataRecord.FieldCount; i++)
|
||||
{
|
||||
this.ReaderKeys.Add(this.DataRecord.GetName(i));
|
||||
}
|
||||
DynamicMethod method = new DynamicMethod("SqlSugarEntity", type,
|
||||
new Type[] { typeof(IDataRecord) }, type, true);
|
||||
ILGenerator generator = method.GetILGenerator();
|
||||
|
Reference in New Issue
Block a user