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

将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. sublime text3配置ctrl+鼠标左键进行函数跳转【转】

    本文转载自:https://blog.csdn.net/shangdibaozi/article/details/77503426 点击Preferences->Browse Packages进 ...

  2. 比较好的SQL

    DECLARE @Data NVARCHAR(30);DECLARE @Data2 NVARCHAR(30);SET @Data = @DataDate;SET @Data = CONVERT(CHA ...

  3. 技术分享:HBase架构

    Zookeeper,作为分布式的协调.RegionServer也会把自己的信息写到ZooKeeper中. HDFS是Hbase运行的底层文件系统 RegionServer,理解为数据节点,存储数据的. ...

  4. ROC 曲线,以及AUC计算方式

    ROC曲线: roc曲线:接收者操作特征(receiveroperating characteristic),roc曲线上每个点反映着对同一信号刺激的感受性. ROC曲线的横轴: 负正类率(false ...

  5. 20165332实验二 Java面向对象程序设计

    20165332实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求 ...

  6. 三 web爬虫,scrapy模块介绍与使用

    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以 ...

  7. MVC,MVP 和 MVVM 的图示,区别

    作者: 阮一峰 日期: 2015年2月 1日 复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身 ...

  8. 双系统在Linux下查看win的硬盘(Ubuntu 16.04 挂载Windows的 硬盘)

    一般情况下,Linux的桌面系统能够直接查看到计算机各个硬盘的文件情况 但是,当我们想通过命令行查看Windows下的硬盘的时候,会发现在 /media/ (一般Windows下的盘会挂载到这里)文件 ...

  9. elementUI表格合并单元格

    相信你肯定看了 ElementUI 官方文档了,没看的话先去看下表格各个属性的意义,方便下文阅读:传送门 但你会发现此例过于简单,死数据,但我们开发的时候往往都是后台传递过来的数据,导致我们 rows ...

  10. 交叉编译工具链介绍《Building Embedded Linux Systems》

    1.前言 配置和编译一个合适的GNU工具链是相对复杂的并且需要很精细的操作,包括你需要对不同软件库之间的依赖关系.它们的各自的任务,不同软件库版本情况都有比较好的了解,编译工具链是一个乏味的工作. 2 ...