c#数据映射实体
来源:互联网 发布:男装一手货源软件 编辑:程序博客网 时间:2024/05/21 12:35
#region datareader向实体映射
/// <summary>
/// DataReader转泛型
/// </summary>
/// <typeparam name="T">传入的实体类</typeparam>
/// <param name="objReader">DataReader对象</param>
/// <returns></returns>
public static IList<T> ReaderToList<T>(this IDataReader objReader)
{
using (objReader)
{
List<T> list = new List<T>();
//获取传入的数据类型
Type modelType = typeof(T);
//遍历DataReader对象
while (objReader.Read())
{
//使用与指定参数匹配最高的构造函数,来创建指定类型的实例
T model = Activator.CreateInstance<T>();
for (int i = 0; i < objReader.FieldCount; i++)
{
//判断字段值是否为空或不存在的值
if (!IsNullOrDBNull(objReader[i]))
{
//匹配字段名
PropertyInfo pi = modelType.GetProperty(objReader.GetName(i), BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
if (pi != null)
{
//绑定实体对象中同名的字段
pi.SetValue(model, CheckType(objReader[i], pi.PropertyType), null);
}
}
}
list.Add(model);
}
return list;
}
}
/// <summary>
/// 对可空类型进行判断转换(*要不然会报错)
/// </summary>
/// <param name="value">DataReader字段的值</param>
/// <param name="conversionType">该字段的类型</param>
/// <returns></returns>
private static object CheckType(object value, Type conversionType)
{
if (conversionType.IsGenericType && conversionType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
if (value == null)
return null;
System.ComponentModel.NullableConverter nullableConverter = new System.ComponentModel.NullableConverter(conversionType);
conversionType = nullableConverter.UnderlyingType;
}
return Convert.ChangeType(value, conversionType);
}
/// <summary>
/// 判断指定对象是否是有效值
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
private static bool IsNullOrDBNull(object obj)
{
return (obj == null || (obj is DBNull)) ? true : false;
}
/// <summary>
/// DataReader转模型
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="objReader"></param>
/// <returns></returns>
public static T ReaderToModel<T>(this IDataReader objReader)
{
using (objReader)
{
if (objReader.Read())
{
Type modelType = typeof(T);
int count = objReader.FieldCount;
T model = Activator.CreateInstance<T>();
for (int i = 0; i < count; i++)
{
if (!IsNullOrDBNull(objReader[i]))
{
PropertyInfo pi = modelType.GetProperty(objReader.GetName(i), BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
if (pi != null)
{
pi.SetValue(model, CheckType(objReader[i], pi.PropertyType), null);
}
}
}
return model;
}
}
return default(T);
}
#endregion
/// <summary>
/// DataReader转泛型
/// </summary>
/// <typeparam name="T">传入的实体类</typeparam>
/// <param name="objReader">DataReader对象</param>
/// <returns></returns>
public static IList<T> ReaderToList<T>(this IDataReader objReader)
{
using (objReader)
{
List<T> list = new List<T>();
//获取传入的数据类型
Type modelType = typeof(T);
//遍历DataReader对象
while (objReader.Read())
{
//使用与指定参数匹配最高的构造函数,来创建指定类型的实例
T model = Activator.CreateInstance<T>();
for (int i = 0; i < objReader.FieldCount; i++)
{
//判断字段值是否为空或不存在的值
if (!IsNullOrDBNull(objReader[i]))
{
//匹配字段名
PropertyInfo pi = modelType.GetProperty(objReader.GetName(i), BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
if (pi != null)
{
//绑定实体对象中同名的字段
pi.SetValue(model, CheckType(objReader[i], pi.PropertyType), null);
}
}
}
list.Add(model);
}
return list;
}
}
/// <summary>
/// 对可空类型进行判断转换(*要不然会报错)
/// </summary>
/// <param name="value">DataReader字段的值</param>
/// <param name="conversionType">该字段的类型</param>
/// <returns></returns>
private static object CheckType(object value, Type conversionType)
{
if (conversionType.IsGenericType && conversionType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
if (value == null)
return null;
System.ComponentModel.NullableConverter nullableConverter = new System.ComponentModel.NullableConverter(conversionType);
conversionType = nullableConverter.UnderlyingType;
}
return Convert.ChangeType(value, conversionType);
}
/// <summary>
/// 判断指定对象是否是有效值
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
private static bool IsNullOrDBNull(object obj)
{
return (obj == null || (obj is DBNull)) ? true : false;
}
/// <summary>
/// DataReader转模型
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="objReader"></param>
/// <returns></returns>
public static T ReaderToModel<T>(this IDataReader objReader)
{
using (objReader)
{
if (objReader.Read())
{
Type modelType = typeof(T);
int count = objReader.FieldCount;
T model = Activator.CreateInstance<T>();
for (int i = 0; i < count; i++)
{
if (!IsNullOrDBNull(objReader[i]))
{
PropertyInfo pi = modelType.GetProperty(objReader.GetName(i), BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
if (pi != null)
{
pi.SetValue(model, CheckType(objReader[i], pi.PropertyType), null);
}
}
}
return model;
}
}
return default(T);
}
#endregion
阅读全文
0 0
- c#数据映射实体
- c#映射数据库中表的实体类
- 将关系数据映射到业务实体
- C# 动态绑定实体数据
- OA权限模块实体映射和数据初始化
- EF Code First:实体映射,数据迁移,重构
- OA权限模块实体映射和数据初始化
- EF Code First:实体映射,数据迁移,重构
- C#中将DataTable数据转为实体对象
- json数据反序列化C#实体
- C#数据实体转换类EntityHelper
- NopCommerce数据迁移之【新增实体及实体映射后添加迁移文件】
- 实体关系映射
- 实体映射策略
- hibernate实体映射
- Hibernate实体映射浅谈
- Hibernate实体映射浅谈
- Hibernate实体映射浅谈
- FWFWE
- TI am335x 内核源码编译命令等
- 目前前后端协作,遇到的问题及思考
- 点击图片放大功能
- RCNN
- c#数据映射实体
- Java中File的基本操作
- 多态
- 【云计算的1024种玩法】部署 Ghost 博客
- 对称加密与非对称加密区别
- nginx源码剖析--从main函数开始
- 【安全牛学习笔记】SQLMAP自动注入-REQUEST
- SVN+maven+jenkins
- mac安装 redis 并 安装 PHP扩展