目前项目中获取到DataSet数据后用下面这种方式复制数据。

    List<AgreementDoc> list = new List<AgreementDoc>();
    ].Rows)
                 {
                     AgreementDoc docItem = new AgreementDoc() {
                         ContactID = row["ContactID"].ToString(),
                         AgreementAccepted = row["AgreementAccepted"].ToString(),
                         AgreementSource = row["AgreementSource"].ToString(),
                         AgreementStatus = row["AgreementStatus"].ToString(),
                         AlternateFirstName = row["AlternateFirstName"].ToString(),
                         AlternateLastName = row["AlternateLastName"].ToString(),
                         City = row["City"].ToString(),
                         RecruiterID = row["RecruiterID"].ToString(),
                         ConsultantID = row["ConsultantID"].ToString(),
                         ConsultantStatus = row["ConsultantStatus"].ToString(),
                         ConsultantSuffix = row["ConsultantSuffix"].ToString(),
                         Director = row["Director"].ToString(),
                         EligibleToLogin = row["EligibleToLogin"].ToString(),
                         EmailAddress = row["EmailAddress"].ToString(),
                         FirstName = row["FirstName"].ToString(),
                         GovernmentIssuedId = row["GovernmentIssuedId"].ToString(),
                         Inserted = row["Inserted"].ToString(),
                         IsReceived = row["IsReceived"].ToString(),
                         LastName = row["LastName"].ToString(),
                         MiddleName = row["MiddleName"].ToString(),
                         PhoneNumber = row["PhoneNumber"].ToString(),
                         Reason = row["Reason"].ToString(),
                         RecruiterContactID = row["RecruiterContactID"].ToString(),
                         RecruiterIndicator = row["RecruiterIndicator"].ToString(),
                         RecruiterName = row["RecruiterName"].ToString(),
                         RegistrationProvince = row["RegistrationProvince"].ToString(),
                         ReleaseAuthorizationIndicator = row["ReleaseAuthorizationIndicator"].ToString(),
                         ResidenceID = row["ResidenceID"].ToString(),
                         StartDate = row["StartDate"].ToString(),
                         StreetAddress = row["StreetAddress"].ToString(),
                         UnitID = row["UnitID"].ToString(),
                         UnitSuffix = row["UnitSuffix"].ToString(),
                         RecuriterFirstName = row["RecuriterFirstName"].ToString(),
                         RecuriterLastName = row["RecuriterLastName"].ToString(),
                         RecuriterMiddleName = row["RecuriterMiddleName"].ToString()
                     };
                     list.Add(docItem);
                 }

探索反射解决方案:

对于目标实体中字段与数据库中字段数据类型不一样时,果断抛出异常。—失败告终....

探索AutoMapper中dynamicMap映射IDataReader到实体时同样会抛出异常,其实它的原理就是反射—失败告终...

探索AutoMapper针对列名属性单一映射方法ForMember();—成功优化。

对于某些需要转化格式的数据做特别处理。

优化后的code:

           AutoMapper.Mapper.CreateMap<IDataReader, AgreementDoc>().ForMember(des => des.ContactID, opt =>
                 {
                     opt.MapFrom(src => (src.GetInt64(src.GetOrdinal("ContactID")).ToString()));
                 }).ForMember(des => des.StartDate, opt =>
                 {
                     opt.MapFrom(src => (src.GetDateTime(src.GetOrdinal("StartDate")).ToString()));
                 });
              List<AgreementDoc> list = AutoMapper.Mapper.Map<IDataReader,List<AgreementDoc>>(ds.CreateDataReader());

记一次利用AutoMapper优化项目中数据层到业务层的数据传递过程。的更多相关文章

  1. AutoMapper在项目中的应用

    一.先说说DTO DTO是个什么东东? DTO(Data Transfer Object)就是数据传输对象,说白了就是一个对象,只不过里边全是数据而已. 为什么要用DTO? 1.DTO更注重数据,对领 ...

  2. JavaEE中表现层、持久层、业务层的职责分析(转载)

    表现层.持久层.业务层 注:本文转载于:http://www.blogjava.net/jiabao/archive/2007/04/08/109189.html 为了实现web层(struts)和持 ...

  3. Web API项目中使用Area对业务进行分类管理

    在之前开发的很多Web API项目中,为了方便以及快速开发,往往把整个Web API的控制器放在基目录的Controllers目录中,但随着业务越来越复杂,这样Controllers目录中的文件就增加 ...

  4. BI项目中的ETL设计详解(数据抽取、清洗与转换 )(转载)

    原文:http://www.cnblogs.com/reportmis/p/5939732.html ETL是BI项目最重要的一个环节,通常情况下ETL会花掉整个项目的1/3的时间,ETL设计的好坏直 ...

  5. Django项目中如何建表?怎样导入数据?

    http://django-chinese-docs.readthedocs.org/en/latest/topics/db/models.html 通常在项目中的models.py文件中建表的 Th ...

  6. 项目中使用emoji表情包与表情的解析过程详情

    菜鸡一只,刚开始写博客文笔不好,有问题欢迎相互讨论.闲话不多说. 用到了三个插件 Emoji Picker 第一步 这个emoji表情包插件是我找到比较好 的一个,input框中是不能放入图片的,效果 ...

  7. 一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构-转

    表现层就是看到的东西,比如你现在看到的当前页面控制层就将你的请求从页面传到后台代码逻辑层就是处理你的请求的代码DAO层就是将数据存到数据库中的代码数据库就是数据库了,存东西用的 ,DAO层就是将访问数 ...

  8. 项目中常用方法总结(将将DataTable数据集映射到实体对象)【转】

    本篇把项目中用到的一些通用方法总结出来, 这些方法因为经常需要在项目中用到,所以把它们归纳在一起, 形成一个.dll 文件是一个理想的选择. 这样也便于日后缩短开发周期. 一. 把一个DataGrid ...

  9. ionic1项目中 ion-slide轮播用ng-repeat遍历数据后自动循环出问题

    <ion-slide-box>属性中循环播放:dose-continue=‘true’,但是在项目遇到这样一个问题,从后台获取数据后将数据ng-repeat到<ion-slide&g ...

随机推荐

  1. 关于MYSQL存储中文问题

    最近在学习MYSQL时遇到了不能存储中文的问题,在网上找了很多类似的方法,最后都失败了(失败原因:修改完my.cnf文件后mysql server重新启动失败),濒临崩溃的时候重装了下mysql(Ub ...

  2. Evermoney -- 重新定义印象笔记编辑体验

    关于印象笔记 知识管理工具自己也算用过很多了,国内的有道,为知:国外的onenote.因为印象笔记的裁剪以及搜索功能太强大了,所以最后还是选择用印象笔记了.不过印象笔记这个公司确实态度有点不敢恭维,关 ...

  3. iOS获取设备型号和App版本号等信息(OC+Swift)

    iOS获取设备型号和App版本号等信息(OC+Swift) 字数1687 阅读382 评论3 喜欢10 好久没有写过博客了,因为中间工作比较忙,然后有些个人事情所以耽误了.但是之前写的博客还一直有人来 ...

  4. 自己实现的string的库函数

    为了更好地理解string的各个库函数,现将几个常用的库函数用自己的方式实现如下: #include<iostream> using namespace std; #include< ...

  5. 记录参加QCon的心得

    如有侵权,请告知作者删除.scottzg@126.com 很荣幸参加QCon全球软件开发大会,这里特别感谢我们部门的总经理,也是<互联网广告算法和系统实践>此书的作者王勇睿.因为他我才有这 ...

  6. C++ 窗口可改风格

    SetWindowLong(m_hWnd,GWL_STYLE,::GetWindowLong(m_hWnd,GWL_STYLE)& ~WS_MAXIMIZEBOX);//去掉最大化 GWL_S ...

  7. Java 设计模式(四)-工厂方法模式 (FactoryMethod Pattern)

    1     概念定义 1.1   定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 1.2   类型 创建类模式 2     原理特征 2.1   类 ...

  8. python自动化测试应用-番外篇--接口测试1

    篇1                 book-python-auto-test-番外篇--接口测试1 --lamecho辣么丑 1.1概要 大家好! 我是lamecho(辣么丑),至今<安卓a ...

  9. linux 基础(1)

    第一章 Linux 基础知识(一) 一.硬件介绍: 由一条总线把CPU.内存和I/O设备串联起来并与其他设备进行通信.CPU负责运算,内存用于储存临时变量,硬盘用于储存数据.1.1处理器CPU 从内存 ...

  10. Android 如何本地加载pdf文件

    大部分app打开pdf文件是通过intent调起手机中能打开pdf文件的工具,来查看pdf文件,如果需求是,用户在app内下载好pdf文件后,不通过第三方的工具,本地打开. 这样的需求要怎么实现呢?上 ...