【转】认识和使用框架之OOM框架——AutoMapper的使用

AutoMapper是一款基于.NET的高效对象到对象映射工具,适用于复杂对象模型与DTO间的转换,支持平展、投影、列表映射等功能。本文详细介绍AutoMapper的基本功能、配置API及与EF6的集成使用。

【转】https://blog.youkuaiyun.com/qq_40741855/article/details/84099285

1.AutoMapper简单介绍

官网:http://automapper.org/

源码:https://github.com/AutoMapper/AutoMapper

NUGET安装: 

PM> Install-Package AutoMapper

AutoMapper是基于对象到对象约定的映射工具,常用于(但并不仅限制于)把复杂的对象模型转为DTO,一般用于ViewModel模式和跨 服务范畴。

 

AutoMapper给用户提供了便捷的配置API,就像使用约定来完成自动映射那样。

 

AutoMapper包含以下功能:

平展、投影、配置验证、列表和数组、嵌套映射、自定义类型转换程序、自定义值转换程序 、自定义值格式程序 、Null值替换

 

AutoMapper是一款单向映射器。

这意味着它并没有内建映射对象支持来回写至原始源,除非用户在更新映射对象之后明确地创建逆向反射。

这需要 通过设计完成,因为让DTO回写到,比方说:域模型或其他东西,就会更改它的持久性,同时人们也认为它是反模式的。在这种解决方案中,命令消息在双向映射 中往往是更好的选择。

然而,在某些特定环境中,有人可能会为双向映射辩解,比如:非常简单的CRUD应用程序。一个支持双向映射的框架就是Glue。

2.使用方法

简单示例1(两个类型之间的映射)

 
  1. // 配置 AutoMapper

  2. Mapper.CreateMap<Order, OrderDto>();

  3. // 执行 mapping

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

简单示例2(两个映射的对象有部分字段名称不一样)

Mapper.CreateMap<AddressDto, Address>(). ForMember(d => d.Country, opt => opt.MapFrom(s => s.CountryName));

简单示例3(列表类型之间的映射)

 
  1. AutoMapper.Mapper.CreateMap< Address, AddressDto >();

  2. var addressDtoList = AutoMapper.Mapper.Map<List< Address >, List< AddressDto >>( addressList);

3.AutoMapper + EF6

使用nuget安装,自动引入AutoMapper和AutoMapper.EF6类库

PM> Install-Package AutoMapper.EF6

扩展方法一览

 
  1.      public static TDestination[] ProjectToArray<TDestination>(this IQueryable queryable);

  2. public static TDestination[] ProjectToArray<TDestination>(this IQueryable queryable, IConfigurationProvider config);

  3. public static Task<TDestination[]> ProjectToArrayAsync<TDestination>(this IQueryable queryable);

  4. public static Task<TDestination[]> ProjectToArrayAsync<TDestination>(this IQueryable queryable, IConfigurationProvider config);

  5. public static TDestination ProjectToFirst<TDestination>(this IQueryable queryable);

  6. public static TDestination ProjectToFirst<TDestination>(this IQueryable queryable, IConfigurationProvider config);

  7. public static Task<TDestination> ProjectToFirstAsync<TDestination>(this IQueryable queryable);

  8. public static Task<TDestination> ProjectToFirstAsync<TDestination>(this IQueryable queryable, IConfigurationProvider config);

  9. public static TDestination ProjectToFirstOrDefault<TDestination>(this IQueryable queryable);

  10. public static TDestination ProjectToFirstOrDefault<TDestination>(this IQueryable queryable, IConfigurationProvider config);

  11. public static Task<TDestination> ProjectToFirstOrDefaultAsync<TDestination>(this IQueryable queryable);

  12. public static Task<TDestination> ProjectToFirstOrDefaultAsync<TDestination>(this IQueryable queryable, IConfigurationProvider config);

  13. public static List<TDestination> ProjectToList<TDestination>(this IQueryable queryable);

  14. public static List<TDestination> ProjectToList<TDestination>(this IQueryable queryable, IConfigurationProvider config);

  15. public static Task<List<TDestination>> ProjectToListAsync<TDestination>(this IQueryable queryable);

  16. public static Task<List<TDestination>> ProjectToListAsync<TDestination>(this IQueryable queryable, IConfigurationProvider config);

  17. public static IQueryable<TDestination> ProjectToQueryable<TDestination>(this IQueryable queryable);

  18. public static IQueryable<TDestination> ProjectToQueryable<TDestination>(this IQueryable queryable, IConfigurationProvider config);

  19. public static TDestination ProjectToSingle<TDestination>(this IQueryable queryable);

  20. public static TDestination ProjectToSingle<TDestination>(this IQueryable queryable, IConfigurationProvider config);

  21. public static Task<TDestination> ProjectToSingleAsync<TDestination>(this IQueryable queryable);

  22. public static Task<TDestination> ProjectToSingleAsync<TDestination>(this IQueryable queryable, IConfigurationProvider config);

  23. public static TDestination ProjectToSingleOrDefault<TDestination>(this IQueryable queryable);

  24. public static TDestination ProjectToSingleOrDefault<TDestination>(this IQueryable queryable, IConfigurationProvider config);

  25. public static Task<TDestination> ProjectToSingleOrDefaultAsync<TDestination>(this IQueryable queryable);

  26. public static Task<TDestination> ProjectToSingleOrDefaultAsync<TDestination>(this IQueryable queryable, IConfigurationProvider config);

这样可以很方便的转换为数据、列表、获取第一条数据等,还可支持异步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值