记一次利用AutoMapper优化项目中数据层到业务层的数据传递过程。
目前项目中获取到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优化项目中数据层到业务层的数据传递过程。的更多相关文章
- AutoMapper在项目中的应用
一.先说说DTO DTO是个什么东东? DTO(Data Transfer Object)就是数据传输对象,说白了就是一个对象,只不过里边全是数据而已. 为什么要用DTO? 1.DTO更注重数据,对领 ...
- JavaEE中表现层、持久层、业务层的职责分析(转载)
表现层.持久层.业务层 注:本文转载于:http://www.blogjava.net/jiabao/archive/2007/04/08/109189.html 为了实现web层(struts)和持 ...
- Web API项目中使用Area对业务进行分类管理
在之前开发的很多Web API项目中,为了方便以及快速开发,往往把整个Web API的控制器放在基目录的Controllers目录中,但随着业务越来越复杂,这样Controllers目录中的文件就增加 ...
- BI项目中的ETL设计详解(数据抽取、清洗与转换 )(转载)
原文:http://www.cnblogs.com/reportmis/p/5939732.html ETL是BI项目最重要的一个环节,通常情况下ETL会花掉整个项目的1/3的时间,ETL设计的好坏直 ...
- Django项目中如何建表?怎样导入数据?
http://django-chinese-docs.readthedocs.org/en/latest/topics/db/models.html 通常在项目中的models.py文件中建表的 Th ...
- 项目中使用emoji表情包与表情的解析过程详情
菜鸡一只,刚开始写博客文笔不好,有问题欢迎相互讨论.闲话不多说. 用到了三个插件 Emoji Picker 第一步 这个emoji表情包插件是我找到比较好 的一个,input框中是不能放入图片的,效果 ...
- 一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构-转
表现层就是看到的东西,比如你现在看到的当前页面控制层就将你的请求从页面传到后台代码逻辑层就是处理你的请求的代码DAO层就是将数据存到数据库中的代码数据库就是数据库了,存东西用的 ,DAO层就是将访问数 ...
- 项目中常用方法总结(将将DataTable数据集映射到实体对象)【转】
本篇把项目中用到的一些通用方法总结出来, 这些方法因为经常需要在项目中用到,所以把它们归纳在一起, 形成一个.dll 文件是一个理想的选择. 这样也便于日后缩短开发周期. 一. 把一个DataGrid ...
- ionic1项目中 ion-slide轮播用ng-repeat遍历数据后自动循环出问题
<ion-slide-box>属性中循环播放:dose-continue=‘true’,但是在项目遇到这样一个问题,从后台获取数据后将数据ng-repeat到<ion-slide&g ...
随机推荐
- JS获取URL中参数值(QueryString)的4种方法
方法一:正则法 function getQueryString(name) { var reg = new RegExp('(^|&)' + name + '=([^&]*)(& ...
- 【2017-04-18】Ado.Net C#连接数据库进行增、删、改、查
一.简介 1.ado.net是一门数据库访问技术. 他可以通过程序来操作数据库 2.类库 Connection 类 和数据库交互,必须连接它.连接帮助指明数据库服务器.数据库名字.用户名.密码,和连接 ...
- Spring整合Quartz定时任务执行2次,Spring定时任务执行2次
Spring整合Quartz定时任务执行2次,Spring定时任务执行2次 >>>>>>>>>>>>>>>&g ...
- 【转载】 stm32之PWM
发现这位博主的博客被大量的转发,我也转载一篇,谁叫人家写的好呢. 原文地址:http://blog.sina.com.cn/s/blog_49cb42490100s6uh.html 脉冲宽度调制(PW ...
- Kruskal和Prim算法求最小生成树
Kruskal算法求最小生成树 测试数据: 5 6 0 1 5 0 2 3 1 2 4 2 4 2 2 3 1 1 4 1 输出: 2 3 1 1 4 1 2 4 2 0 2 3 思路:在保证不产生回 ...
- cmapx 保存绘制好的图层
研究了两天,如何保存一绘制好的图层,大致意思都说要使用mapInfo表,然后确定了可定和.TAB表有关.然而网上说的全是垃圾,也不能说全是垃圾,好歹我从中得到了一点点有用的信息,使用mapManage ...
- iOS开发 - Swift使用GCD实现计时器功能
前言 开发中,经常会用到定时执行网络请求.倒计时.计时器等功能,本篇文章介绍在iOS开发中,Swift怎样使用GCD实现这些功能. 执行一次 下面的代码将会在5秒后执行,且只执行一次. let tim ...
- 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 C - Monkey and Banana
https://vjudge.net/contest/68966#problem/C [参考]http://blog.csdn.net/qinmusiyan/article/details/79862 ...
- 如何自建appender扩展Log4j框架
1.log4j 概述 log4j 环境包括三个主要组件: logger(日志记录器):控制要启用或禁用哪些日志记录语句.可以对日志记录器指定如下级别: ALL . DEBUG . INFO . WAR ...
- Yeelink初步体验
环境 Qemu: 2.8.0 开发板:vexpress-ca9 概述 前面的博文已经使我们的虚拟开发板具备了访问外网的目的,离物联网越来越近了.要玩物联网,Yeelink不得不说,它提供了 ...