记一次利用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 ...
随机推荐
- 读《effective C++》2
条款03:尽可能使用const(Use const whenever possible) 1.const == 奇妙的事 const的一件奇妙的事是,他允许你定义一个约束,(告诉编译器,这是一个“不该 ...
- PMBOK 学习与实践分享视频
本系列为自己在学习PMBOK时进行的总结与分享,每一节主要包括两部分: 对PMBOK本身的一个结构笔记和讲解. 对自己项目管理工作的一个总结和思考. PMBOK 学习与实践分享视频内容清单 人力资源管 ...
- css3---线性渐变
.example1 { width: 150px; height: 80px; background: -moz-linear-gradient( top,#ccc,#000); background ...
- 开发一款直播APP系统软件应该有哪些功能,如何开发?
1.技术实现层面: 技术相对都比较成熟,设备也都支持硬编码.IOS还提供现成的 Video ToolBox框架,可以对摄像头和流媒体数据结构进行处理,但Video ToolBox框架只兼容8.0以上版 ...
- 人生苦短,我用Python
Life is short, You need Python. 工作中常常要用到脚本来完成许多重复性的工作,刚开始是查数据库的时候,也曾用shell 来写脚本,但终于还是觉得shell太艰涩, 一行命 ...
- [.NET] 《Effective C#》快速笔记(四)- 使用框架
<Effective C#>快速笔记(四)- 使用框架 .NET 是一个类库,你了解的越多,自己需要编写的代码就越少. 目录 三十.使用重写而不是事件处理函数 三十一.使用 ICompar ...
- Linux centos7下安装配置redis及Redis desktop Manager工具连接注意事项
基本工具:VMware12.CentOS-7-x86_64-Everything-1611.iso.redis-desktop-manager-0.8.0.3841 废话不多说,首先,关于什么是Red ...
- Layout基本属性总结
在Android中,共有五种布局方式,分别是:FrameLayout(框架布局),LinearLayout (线性布局),GridLayout(网格布局),RelativeLayout(相对布局),T ...
- libpng处理png图片(一)
一:libpng库的编译 环境:windows10 + VS2013 需要下载:libpng, zlib两个库 下载地址: libpng:http://libmng.com/pub/png/libpn ...
- openresty源码剖析——lua代码的执行
上一篇文章中我们讨论了openresty是如何加载lua代码的 那么加载完成之后的lua代码又是如何执行的呢 ##代码的执行 在init_by_lua等阶段 openresty是在主协程中通过lu ...