AutoMapper Getting started

  1. AutoMapper 是什么?
  2. 为什么要用AutoMapper?
  3. 如何使用AutoMapper?
  4. 在什么地方配置AutoMapper?
  5. 如何测试my mappings?

AutoMapper 是什么?



AutoMapper是一个对象到对象的映射关系,对象到对象的映射是通过转化一个类型对象输入到一个不同的类型对象输出来工作的,使得AutoMapper让人感兴趣的一点就是他提供了一些比较有趣的规则把繁重的工作从类型对象转换算法中剔除掉,

只要类型对象遵循了AutoMapper建立的规则,基本上不需要额外的配置去做类型对象之间的转化。

为什么要用AutoMapper?



类型转换代码是令人讨厌的,测试类型转换代码更加的令人讨厌,AutoMapper提供了非常简单的配置机制,类型转换测试也变得同样简单,现在真正剩下的需要关心的问题是why use object-object mapping?,

类型转化会发生在项目中很多地方,但是大部分发生在层与层之间的边界,例如 UI/Domain 之间,或者Service/Domain 之间,通常来说一层关心的东西和另外一层关心的东西是不一致的,

所以对象到对象的映射产生了一个隔离的模型,这样每一层的对象的变化更加独立,仅仅会影响对象所在的层,对其他的层不会产生影响

如何使用AutoMapper?



首先,你需要Source类型和目标类型,这个目标类型在设计之初就会受到其所在层的影响,但是AutoMappers依然可以工作的很好,只要目标对象成员名称和源对象成员名称匹配,例如你有一个源对象属性叫FirstName,

那么他将会自动映射 到目标对象成员名称叫FirstName的属性,AutoMapper也支持Flattening

当映射源类型到目标类型时,AutoMapper会忽略空引用异常,这是默认的设计,如果你不喜欢这种设计,你可以结合AutoMapper Custom-value-resolver,如果需要的话。

一旦你有了两个类型,而且引用了AutoMapper,你就可以给这两个类型添加映射,

Mapper.CreateMap<Order, OrderDto>();

左边的类型是源类型,右边的类型是目标类型,用下面的方法去执行一个映射

OrderDto dto = Mapper.Map<OrderDto>(order);

AutoMapper也有非泛型的方法。

在什么地方配置AutoMapper?



如果你使用静态的映射方法,配置时只需要在appDomain中配置一次,这意味着你最好的选择就是把配置代码方法在程序启动项中,例如Global.asax。需要说明的是,在bootstrapper(启动加载器)内配置自己,

这个bootstrapper也被称作为启动方法。

如何测试my mappings?



创建一个映射测试,你要做两件事

  1. 调用启动项中创建映射的方法
  2. 调用Mapper.AssertConfigurationIsValid方法

就像下面这个例子一样:

AutoMapperConfiguration.Configure();

Mapper.AssertConfigurationIsValid();

https://github.com/AutoMapper/AutoMapper/wiki/Getting-started

时间: 2024-11-25 04:54:23

AutoMapper Getting started的相关文章

使用AutoMapper实现Dto和Model的自由转换(上)

在实际的软件开发项目中,我们的"业务逻辑"常常需要我们对同样的数据进行各种变换.例如,一个Web应用通过前端收集用户的输入成为Dto,然后将Dto转换成领域模型并持久化到数据库中.另一方面,当用户请求数据时,我们又需要做相反的工作:将从数据库中查询出来的领域模型以相反的方式转换成Dto再呈现给用户.有时候我们还会面临更多的数据使用需求,例如有多个数据使用的客户端,每个客户端都有自己对数据结构的不同需求,而这也需要我们进行更多的数据转换. 频繁的数据转换琐碎而又凌乱,很多时候我们不得不:

使用AutoMapper实现Dto和Model的自由转换(中)

在上一篇文章中我们构造出了完整的应用场景,包括我们的Model.Dto以及它们之间的转换规则.下面就可以卷起袖子,开始我们的AutoMapper之旅了. [二]以Convention方式实现零配置的对象映射 我们的AddressDto和Address结构完全一致,且字段名也完全相同.对于这样的类型转换,AutoMapper为我们提供了Convention,正如它的官网上所说的: 引用 AutoMapper uses a convention-based matching algorithm to

使用AutoMapper实现Dto和Model的自由转换(下)

书接上文.在上一篇文章中我们讨论了使用AutoMapper实现类型间1-1映射的两种方式--Convention和Configuration,知道了如何进行简单的OO Mapping.在这个系列的最后一篇文章我想基于我们的需求讨论一些中级别的话题,包括:如何实现类型体型之间的映射,以及如何为两个类型实现多个映射规则. [四]将一个类型映射为类型体系 先回顾一下我们的Dto和Model.我们有BookDto,我们有Author,每个Author有自己的ContactInfo.现在提一个问题:如何从

对象映射工具AutoMapper介绍

AutoMapper是用来解决对象之间映射转换的类库.对于我们开发人员来说,写对象之间互相转换的代码是一件极其浪费生命的事情,AutoMapper能够帮助我们节省不少时间. 一. AutoMapper解决了什么问题? 要问AutoMapper解决了什么问题? 难道不是对象映射转换的问题吗? 当然是,不过我们可以问深入一些,为什么项目中会出现大量的对象映射转换?(以下对于非MVC项目也适用) 在现代的软件开发中,项目的层级更加的细分,而不同层级之间对于对象的需求是有区别的,这就需要在不同层级间传递

0.AutoMapper

AutoMapper是基于约定的对象 - 对象映射器.AutoMapper使用流畅的配置API来定义对象 - 对象映射策略.AutoMapper使用基于约定的匹配算法来匹配源到目标值.AutoMapper面向模型投影场景,将复杂的对象模型变成DTO和其他简单对象,这些对象的设计更适合于序列化,通信,消息传递或简单的域和应用程序层之间的防腐层. 1.扁平化 2.投影 3.配置验证 4.列表和数组 5.嵌套映射 6.自定义类型转换器 7.自定义值解析器 8.空替换 9.映射操作之前和之后 10.依赖

AutoMapper的介绍与使用(二)

AutoMapper的匹配 1,智能匹配 AutoMapper能够自动识别和匹配大部分对象属性: 如果源类和目标类的属性名称相同,直接匹配,不区分大小写 目标类型的CustomerName可以匹配源类型的Customer.Name 目标类型的Total可以匹配源类型的GetTotal()方法 2,自定义匹配 Mapper.CreateMap<CalendarEvent, CalendarEventForm>()                                          

升级AutoMapper后遇到的“Missing map”与“Missing type map configuration or unsupported mapping”问题

前几天发现 AutoMapper 3.3 的一个性能问题(详见:遭遇AutoMapper性能问题:映射200条数据比100条慢了近千倍),于是将 AutoMapper 升级至最新的 5.1.1 看是否也存在这个性能问题. 升级中想当然地将之前的map配置代码: Mapper.CreateMap<AEntity, ADto>(); Mapper.CreateMap<BEntity, BDto>(); 改为: Mapper.Initialize(cfg => cfg.Create

遭遇AutoMapper性能问题:映射200条数据比100条慢了近千倍

今天遇到了AutoMapper的一个性能问题,使用的是AutoMapper的Project特性,AutoMapper版本是3.3.0,代码如下: return await _repository .GetByStartId(startIngId, itemCount) .Project() .To<TDto>() .ToListAsync(); 当获取包含200条数据的列表时,竟然超过5秒. GetDocs(3000, 200) 6304ms GetDocs(3000, 200) 5822ms

分享一个简单程序(webApi+castle+Automapper+Ef+angular)

前段时间在周末给朋友做了一个小程序,用来记录他们单位的一些调度信息(免费,无版权问题).把代码分享出来.整个程序没有做任何架构.但是麻雀虽小,用到的技术也没少.WebApi+Castle+AutoMapper+Ef+angular,日志记录Log4net.初学者可以学习借鉴,虽然做的比较仓促,但是自我感觉代码写的还是比较规范. git地址:https://git.oschina.net/richieyangs/TaskRecord.git 只需修改web.config中的连接字符串,Ctrl+F

无名小卒AutoMapper的大显神威

最近在做gxpt(高校平台的项目),前台框架用的是MVC,后台用的是EF+WCF.怎么突然说出来感觉很高大上的样子.呵呵!但是在写代码的时候就发现一个问题.就是在EF中的实体(Model)跟前台需要的实体(DTO数据传输对象)是不一样的,所以就需要转换一下.一开始也没多想,可能是被做项目的热情冲昏了头脑,写多少代码都不觉得类,所以每当需要转换的时候就一个一个的写!给大家看一个例子! <span style="font-size:18px;">namespace testau