AutoMapper搬运工之配置
回顾
前几篇搬运了AutoMapper的基本用法,自定义映射,相信有看的同学已经会使用AutoMapper这个强大的Mapping工具了。不过细心的你是否还记得前几篇中有提到Map的创建并非是每次都需要Create,那么AutoMapper对于这些如果管理呢?这篇我们就要来看看AutoMapper的配置。
初始化
AutoMapper提供一个初始化函数(Mapper.Initialize),可以在程序初始化时调用(Web应用程序可以在Global.asax里写),进行统一的配置初始化。前几个章节的CreateMap就可以统一写到此处,如下:
Mapper.Initialize(cfg => {
Mapper.CreateMap<CalendarEvent, CalendarEventForm>()
.ForMember(dest => dest.EventDate, opt => opt.MapFrom(src => src.Date.Date))
.ForMember(dest => dest.EventHour, opt => opt.MapFrom(src => src.Date.Hour))
.ForMember(dest => dest.EventMinute, opt => opt.MapFrom(src => src.Date.Minute));
});
OK,是不是很方便,那么问题来了,cfg是个什么东西?这里根本没用嘛?
当然不是这样的,Config里的配置还有很多的,只不过这篇我们就讲如何统一处理CreateMap,其他配置可以自己敲代码看一下,如果有问题,也可以留言交流下。后面的章节里会逐个讲。
那么本篇就结束了么?没有,细心的你会不会觉得在Global.asax里写这么多CreateMap严重影响了代码的美观和可维护性。如果写到外面去处理那不是更方便。当然,强大的AutoMapper已经为你想好了,不过显然这里其实也可以自己单独写一个方法来处理。
配置文件 (Profile)
如果熟悉windows的网络配置netsh wlan profile的同学肯定对Profile的概念不陌生,简单的说就是按照AutoMapper的规范单独的制定了一个格式的文件,在该文件中可以预定于一些AutoMapper的配置,用于统一分门别类的管理好我们在使用AutoMapper时需要的配置。
一个标准的AutoMapper配置文件是这样子的:
public class OrganizationProfile : Profile
{
protected override void Configure()
{
//将CreateMap放到此处
} //配置的名称,默认可以定义为当前的类名
public override string ProfileName
{
get { return this.GetType().Name; }
}
}
定义好了配置文件,只需要在AutoMapper初始化时添加即可:
Mapper.Initialize(cfg => { cfg.AddProfile<OrganizationProfile>();
});
如果你觉得配置文件就只有这么简单的功能的话,那么就错了,Profile还有更强大的功能,那就是每个Profile里创建的Map可以单独配置Mapping的一些规则,例如:
public class OrganizationProfile : Profile
{
protected override void Configure()
{
//Mapper.CreateMap写到此处... Etc.. here
SourceMemberNamingConvention = new LowerUnderscoreNamingConvention();
DestinationMemberNamingConvention = new PascalCaseNamingConvention();
}
}
SourceMemberNamingConvention指的是源对象的属性匹配规则,即默认的是propertyName -> propertyName的转换,这里设置了一个带下划线的匹配LowerUnderscoreNamingConvention, 即property_name -> PropertyName
DestinationMemberNamingConvention指的是目标对象的属性匹配规则,这里的PascalCaseNamingConvention指的是按照Pascal驼峰命名规则来处理。这两个处理Convention是AutoMapper已经提供的,如果需要自定义更强大的Convention那么,请期待下节:《AutoMapper搬运工之自定义转换规则》
以上文章搬运自:https://github.com/AutoMapper/AutoMapper/wiki/Configuration
另外参考文章:http://consultingblogs.emc.com/owainwragg/archive/2010/12/15/automapper-profiles.aspx
如有不对的地方请指教,如果觉得好,请点推荐,感激不尽~
AutoMapper搬运工之配置的更多相关文章
- AutoMapper搬运工之自定义类型转换
前言 最近还挺忙,还有点累,一直都没更新了,实在是懒呀.正题之前先说点别的,最近公司要扩张了,需要大量开发,领导说推荐有钱可以拿,如此好机会,我就趁机做个广告.ShippingRen.com招募.NE ...
- automapper如何全局配置map条件过滤null值空值对所有映射起效
原文 automapper如何全局配置map条件过滤null值空值对所有映射起效 我们在使用automapper的时候经常会遇到这样的问题:假设展示给用户的数据我们用UserDto类,User类就是我 ...
- AutoMapper搬运工之初探AutoMapper
写在前面 知道AutoMapper很久了,但是一直没有用,最近刚好有个场景需要就用了,果然是利器.看了git上的wiki,发现内容其实wiki上写的很全面了,深入的暂时还没挖掘到.不过和群里的朋友交流 ...
- AutoMapper搬运工之自定义映射
回顾 上节说到了AutoMapper的简单使用,对于复杂的Mapping需要强大的自定义,这节我们来看下AutoMapper的自定义Mapping(Projection) 搬运自Git:https:/ ...
- 2、Automapper安装及配置
一. 安装 我们安装是在 vs 中使用Nuget的方式进行安装 不过安装时需注意一件事情就是,版本问题,我示例使用的是.net framework 4.5.2,所以我安装AutoMapper的版本是7 ...
- AutoMapper不用任何配置就可以从dynamic(动态)对象映射或映射到dynamic对象。
http://www.cnblogs.com/farb/p/4934476.html#pz
- 配置AutoMapper映射规则《转》
配置AutoMapper映射规则 AutoMapper是基于约定的,因此在实用映射之前,我们需要先进行映射规则的配置. public class Source { public int SomeVal ...
- 【AutoMapper官方文档】DTO与Domin Model相互转换(上)
写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...
- 【AutoMapper官方文档】DTO与Domin Model相互转换(中)
写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...
随机推荐
- Ruby升级的最新方法
今天安装cocoapods时候出现了下面的提示Error installing pods:active support requires Ruby version >= 2.2.0这个需求的意思 ...
- LNMP搭建(yum)
CentOS官方镜像不提供nginx,http://nginx.orghttp://nginx.org/en/linux_packages.html#stable yum install nginx ...
- 【Codefoces487E/UOJ#30】Tourists Tarjan 点双连通分量 + 树链剖分
E. Tourists time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard inpu ...
- 使用Maven Assembly plugin将依赖打包进jar
一个Eclipse的工程,在pom中配置了若干依赖,需要将pom中所有的依赖全部打包进一个jar包中,可以选择的方案有maven-assembly-plugin和fatjar.以前采用fatjar进行 ...
- HTML5 开发框架
WeUI WeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信 Web 开发量身设计,可以令用户的使用感知更加统一.包含button.cell.dialog. progress ...
- 机器学习笔记----四大降维方法之PCA(内带python及matlab实现)
大家看了之后,可以点一波关注或者推荐一下,以后我也会尽心尽力地写出好的文章和大家分享. 本文先导:在我们平时看NBA的时候,可能我们只关心球员是否能把球打进,而不太关心这个球的颜色,品牌,只要有3D效 ...
- Samba服务器配置
Samba服务器配置流程: (1)安装samba服务器先用#rpm -ivh samba-列出与samba有关的rpm包然后选择第一个包,用tab键补齐文件名 (2)创建新用户和其密码#useradd ...
- 非对称加密算法——RSA
RSA 这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作,也很流行.算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和L ...
- SQL case
case when Value='1' then 'True' else 'False' end as 'Result'
- C#深入浅出 继承(六)
这个标题写出来好长时间了,都没写内容,今天无论如何都得写完它,昨天写了一段,尼玛,电脑突然死机,重启之后啥都没了. 继承嘛,有人觉得很简单,但是里面还是有内容可以讲的,因为面向对象也就这么点内容,封装 ...