虽说反射的效率比较低,但是在当今的时代,盛行的大数据,以及高并发的产生,硬件的产能正在逐渐的提升,所以我们可以用空间来换取时间.反射所消耗的那些性能问题其实在企业级开发而言也就无所谓了.二 : 反射得确是可以提升开发效率.

将SqlDataReader反射转换为Model实体,省去了每个Reader还要判断转换一下,如此消耗开发效率的问题,怎么能容忍呢?

代码 :

         /// <summary>
/// 将SqlDataReader转换为Model实体
/// </summary>
/// <typeparam name="T">实例类名</typeparam>
/// <param name="dr">Reader对象</param>
/// <returns>实体对象</returns>
public static T ReaderToModel<T>(IDataReader dr)
{
try
{
using (dr)
{
if (dr.Read())
{
Type modelType = typeof(T);
T model = Activator.CreateInstance<T>();
for (int i = ; i < dr.FieldCount; i++)
{
if(!IsNullOrDbNull(dr[i]))
{
PropertyInfo pi = modelType.GetProperty(GetPropertyName(dr.GetName(i)));
pi.SetValue(model, HackType(dr[i], pi.PropertyType), null);
}
}
return model;
}
}
return default(T);
}
catch (Exception)
{ throw;
}
} /// <summary>
/// 对可空类型进行判断.
/// </summary>
private static object HackType(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>
/// 判断字段值是否为NUll
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
private static bool IsNullOrDbNull(object obj)
{
return ((obj is DBNull) || string.IsNullOrEmpty(obj.ToString())) ? true : false;
} /// <summary>
/// 获取属性类的名称
/// </summary>
/// <param name="column">列名</param>
/// <returns>列名</returns>
private static string GetPropertyName(string column)
{
string[] narr = column.Split('_');
column = "";
for (int i = ; i < narr.Length; i++)
{
if (narr[i].Length > )
{
column += narr[i].Substring(, ).ToUpper() + narr[i].Substring();
}
else
{
column += narr[i].Substring(, ).ToUpper();
}
}
return column;
}

C# 反射之SqlDatareader转换为Model实体.的更多相关文章

  1. DataTable转换为Model实体对象

    记得在学校的时候,接触得最多的就是SqlHelper,每次在读取的时候不管是DataTable还是DataReader转换为实体对象的时候是最恼火的,因为要写很多代码,而且没有什么意义.后面接触到了反 ...

  2. C#把 DataTable转换为Model实体

    public static List<T> GetModelFromDB<T>( DataTable dt ) { List<T> data = new List& ...

  3. 反射实现 Data To Model

    调用 : public ActionResult Index() { DataTable dt = new DataTable(); dt.Columns.Add("Name"); ...

  4. DataTable和DataRow利用反射直接转换为Model对象的扩展方法类

    DataTable和DataRow利用反射直接转换为Model对象的扩展方法类   /// <summary> /// 类 说 明:给DataTable和DataRow扩展方法,直接转换为 ...

  5. 利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model

    利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model   使用场景:网站配置项目,为了便于管理,网站有几个Model类来管理配置文件, 比如ConfigWebsiteMo ...

  6. 利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理

    利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理   2018-3-10 15:18 | 发布:Admin | 分类:代码库 | 评论: ...

  7. 把汉字转换为html实体编码

    背景:工作中需要把汉字转换为html实体编码实现方式:import org.apache.commons.lang.StringEscapeUtils;public static void main( ...

  8. IOS 字典快速转换为Model 模型

    一般情况下IOS得局部页面加载的过程是,创建一个Model然后,将Nib文件与Model进行关联,然后能够快速的获取到Nib文件上的控件实例.操作生成页面. 但是原生的内容是没有直接通过Json获取M ...

  9. 把字符转换为 HTML 实体

    把字符转换为HTML实体:htmlentities() 把HTML实体转换回字符:html_entity_decode() 把预定义的字符 "<" (小于)和 "& ...

随机推荐

  1. JZ2440裸机点亮LED【学习笔记】

    平台:jz2440 作者:庄泽彬(欢迎转载,请注明作者) 说明:韦东山一期视频学习笔记 一.我们首先来做第一个实验,用汇编语言点亮板子上的LED. 1.1 LED的原理图 从下面的原理图可知LED1是 ...

  2. DCU Streamer Prefetcher

    DCU Streamer Prefetcher数据高速缓存单元预取流设置.如果设置为Enabled,会预取流并发送到它的一级缓存,以改善数据处理和系统性能,所以建议选择Enabled.选项:Enabl ...

  3. Google maps API

    https://developers.google.com/kml/documentation/kml_tuthttps://developers.google.com/maps/documentat ...

  4. windchill系统——一些功能查找

    1.创建产品 导航栏的浏览——>最近的产品——>全部查看——>新建产品——>填写“名称”.选择“模板”.一定的“说明”.“专用访问权限”一般选择“否”——>“确定”选项 ...

  5. response.setHeader()用法

    response.setHeader()下载中文文件名乱码问题 收藏  1. HTTP消息头 (1)通用信息头 即能用于请求消息中,也能用于响应信息中,但与被传输的实体内容没有关系的信息头,如Data ...

  6. NFV及vIMS的部署实施

    随着5G和物联网等领域的快速发展,移动数据业务飞速增长,而传统电信网络基于专用硬件的架构和封闭式的网元,已经成为运营商拓展新业务的严重障碍.NFV能够根据用户和业务需求灵活动态地进行网络资源配置,实现 ...

  7. LeetCode第[21][23]题(Java):Merge Sorted Lists

    题目:合并两个已排序链表 难度:Easy 题目内容: Merge two sorted linked lists and return it as a new list. The new list s ...

  8. codeforces 831B. Keyboard Layouts 解题报告

    题目链接:http://codeforces.com/contest/831/problem/B 题目意思:给出两个长度为26,由小写字母组成的字符串s1和s2,对于给出的第三个字符串s3,写出对应s ...

  9. Shell 双括号概述

    1. 比较两个数的大小 #!/bin/bash ## 定义变量 a= b= ## 方法1,一个方括号,需要转义 if [ $a \> $b ];then echo "方法1:yes&q ...

  10. windows钩​子​

    (转自:http://wenku.baidu.com/view/5d41fdbec77da26925c5b08d.html) Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消 ...