using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
namespace SqlSugar
{
public partial class DbBindAccessory
{
///
/// 根据输入类型获取对应的成员属性集合
///
///
///
public static PropertyInfo[] GetProperties(Type type)
{
return type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
}
///
/// 设置属性值
///
///
///
///
public static void SetPropertyValue(object obj, PropertyInfo property, object value)
{
if (property.CanWrite)
{
Type Ts = obj.GetType();
object v = Convert.ChangeType(value, Ts.GetProperty(property.Name).PropertyType);
Ts.GetProperty(property.Name).SetValue(obj, v, null);
}
}
protected List GetEntityList(SqlSugarClient context, IDataReader dataReader)
{
Type type = typeof(T);
var fieldNames = GetDataReaderNames(dataReader);
string cacheKey = GetCacheKey(type,fieldNames);
IDataReaderEntityBuilder entytyList = context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(cacheKey, () =>
{
var cacheResult = new IDataReaderEntityBuilder(context, dataReader,fieldNames).CreateBuilder(type);
return cacheResult;
});
List result = new List();
//PropertyInfo[] properties = GetProperties(type);
//while (dataReader.Read())
//{
// T entity = new T();
// foreach (PropertyInfo property in properties)
// {
// String name = tableInfo.PropToColumn[property.Name].ToString();
// ReflectionHelper.SetPropertyValue(entity, property, sdr[name]);
// }
// list.Add(entity);
//}
//Console.WriteLine(fieldNames);
try
{
if (dataReader == null) return result;
while (dataReader.Read())
{
//zheli
var tar = entytyList.Build(dataReader);
result.Add(entytyList.Build(dataReader));
}
}
catch (Exception ex)
{
Check.Exception(true, ErrorMessage.EntityMappingError, ex.Message);
}
return result;
}
protected List GetEntityListNew(SqlSugarClient context, IDataReader dataReader)
{
Type type = typeof(T);
var fieldNames = GetDataReaderNames(dataReader);
string cacheKey = GetCacheKey(type, fieldNames);
IDataReaderEntityBuilder entytyList = context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(cacheKey, () =>
{
var cacheResult = new IDataReaderEntityBuilder(context, dataReader, fieldNames).CreateBuilder(type);
return cacheResult;
});
List result = new List();
//Console.WriteLine(fieldNames);
try
{
if (dataReader == null) return result;
while (dataReader.Read())
{
//zheli
result.Add(entytyList.Build(dataReader));
}
}
catch (Exception ex)
{
Check.Exception(true, ErrorMessage.EntityMappingError, ex.Message);
}
return result;
}
private string GetCacheKey(Type type,List 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 GetDataReaderNames(IDataReader dataReader)
{
List keys = new List();
var count = dataReader.FieldCount;
for (int i = 0; i < count; i++)
{
keys.Add(dataReader.GetName(i));
}
return keys;
}
protected List GetKeyValueList(Type type, IDataReader dataReader)
{
List result = new List();
while (dataReader.Read())
{
if (UtilConstants.DicOO == type)
{
var kv = new KeyValuePair