利用反射自己写的一个ModelHelper类

开发中 很多人都会使用BLL Model这种开发,我也是,虽然现在有很多的自动生成工具,能在几秒内生成cs的模板,但我个人还不是很喜欢,我还是喜欢自己一个一个去写,这样更能了解自己的代码。

不过手动编写的时候,最讨厌的就是GetModel这类方法了,把datarow的数据转换成一个Model,实在写的我头疼,因为很多代码基本上都是一样的,一直想用反射来写这样一个方法,以后只要调用一个方法就能完成Model的赋值,那样就方便了。今天又遇到此类代码了,一时火大,自己写了个方法,采用的反射的原理(从BlogEngine里学来的),或许这个方法比较笨拙,或许有其他更好的方法来实现,不过目前是能满足我的GetModel的需求了,也就凑活着放上来,希望大家能给我更好的建议。

废话不说了 代码如下:

Code
 public class ModelHelper <T> where T : new()
     {
 public static T ConvertModel(DataRow dr)
         {
             T t = new T();
             Type modelType = t.GetType();
 foreach (PropertyInfo p in modelType.GetProperties())
             {
                 p.SetValue(t, GetDefaultValue(dr[p.Name], p.PropertyType), null);
             }
 return t;
         }
 
 private static object GetDefaultValue(object obj, Type type)
         {
 if (obj == DBNull.Value)
             {
                 obj = default(object);
             }
 else
             {
                 obj = Convert.ChangeType(obj, type);
             }
 return obj;
         }
 
     }

范例: Model model = ModelHelper<Model>.ConvertModel(DataRow)

ConvertModel静态方法就是转换的,GetDefaultValue方法则是获取object的默认值的,因为从DataRow里取到的值,有时候是DBNull,如果直接赋值的话会Throw错误的。

不好的地方:

1、Model类必须与DataRow的列名一一对应

2、Model类我设定了必须要有析构器的

代码或许不是很理想,希望大侠们指点一二。

Email:dally_2000@163.com

PS:明天就是平安夜了,希望大家玩的开心

PS2:好兄弟的爸爸去了,有点难过,愿他在天堂能快乐

PS3:大家帮个忙,我做了个网站给我老婆,希望大家能踊跃的留言祝福。

网址:http://www.yangwenjie.cn/flash.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏魂祭心

原 荐 neo-共识算法dBFT 源码解析

51860
来自专栏木宛城主

SharePoint下利用DocX组件导出Word

平常开发时,或多或少都需要和Word打交道,特变是编辑、导出Word。 利用DocX,开源的读写Word组件,可以快速帮助我们进行对Word的操作。 Do...

28450
来自专栏码农阿宇

.Net Core中利用TPL(任务并行库)构建Pipeline处理Dataflow

在学习的过程中,看一些一线的技术文档很吃力,而且考虑到国内那些技术牛人英语都不差的,要向他们看齐,所以每天下班都在疯狂地背单词,博客有些日子没有更新了,见谅见谅...

28410
来自专栏大内老A

事件(Event),绝大多数内存泄漏(Memory Leak)的元凶[上篇]

最近这两天一直在忙着为一个项目检查内存泄漏(Memory Leak)的问题,对相关的知识进行了一下简单的学习和探索,其间也有了一些粗浅的经验积累,今天特意写一篇...

26460
来自专栏dotnet & java

WCF 入门 (17)

首先修改服务端的app.config 配置文件,先使用basicHttpBinding

9220
来自专栏跟着阿笨一起玩NET

Linq to sql并发与事务

       为了看起来清晰,我已经事先把所有分类为1产品的价格和库存修改为相同值了。然后执行下面的程序:

9820
来自专栏NetCore

ADO.NET 2.0 中的新增 DataSet 功能

ADO.NET 2.0 中的新增 DataSet 功能 发布日期: 1/13/2005 | 更新日期: 1/13/2005 Jackie Goldstein ...

203100
来自专栏码农阿宇

.Net Core中利用TPL(任务并行库)构建Pipeline处理Dataflow

在学习的过程中,看一些一线的技术文档很吃力,而且考虑到国内那些技术牛人英语都不差的,要向他们看齐,所以每天下班都在疯狂地背单词,博客有些日子没有更新了,见谅见谅...

11710
来自专栏程序员的SOD蜜

一行代码调用实现带字段选取+条件判断+排序+分页功能的增强ORM框架

问题:3行代码 PDF.NET 是一个开源的数据开发框架,它的特点是简单、轻量、快速,易上手,而且是一个注释完善的国产开发框架,受到不少朋友的欢迎,也在我们公...

33690
来自专栏张高兴的博客

张高兴的 Windows 10 IoT 开发笔记:HC-SR04 超声波测距模块

31670

扫码关注云+社区

领取腾讯云代金券