AutoMapper自动映射框架的使用(一)

在写API过程中,因为业务关系经常要把数据传递给前端,而业务的数据类型来源于Model层中的属性,有的时候我们不想把所有属性都暴露出来,只需要部分属性而或者需要一些处理过的数据,介于Model层上我们可以新建一个Dto层,利用自动映射框架批量化处理数据节省搬砖的劳动力,也方便日后的更新和维护:

一、首先安装自动映射框架(每次安装框架时都得注意版本):

二、向系统的IOC容器注入AutoMapper的服务依赖:

在StartUp文件的ConfigureServices方法里面:

//扫描profile文件(配置文件)
            services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());

AtuoMapper服务依赖注册机制:AddAutoMapper将会自动扫描程序集里所有包含映射关系的ProFile文件,然后通过调用AppDomain.CurrentDomain.GetAssemblies(),AtuoMapper会把所有的ProFile文件加载到目前的AppDomain中。

系统的映射就是通过ProFile进行管理的;

三、创建Dto文件

原来的Medel:

 四、创建ProFile文件

public class TouristRouteProfile : Profile
    {
        public TouristRouteProfile()
        {
            CreateMap<TouristRoute, TouristRouteDto>()
                .ForMember(           //ForMember函数做字段的投影,
                dest => dest.Price,    //目标对象
                opt => opt.MapFrom(src => src.OriginalPrice * (decimal)(src.DiscountPresent ?? 1))  //原始数据做改变
                )
                .ForMember(
                    dest => dest.TravelDays,
                    opt => opt.MapFrom(src => src.TravelDays.ToString())
                )
                .ForMember(
                    dest => dest.DepartureCity,
                    opt => opt.MapFrom(src => src.DepartureCity.ToString())
                )
                .ForMember(
                    dest => dest.TripType,
                    opt => opt.MapFrom(src => src.TripType.ToString())
                );
    }  
}

五、在Controller中运用:

①给控制器注入服务依赖:

 ②运用:

 对比:

手动映射和自动映射:

 AutoMapper自动映射强大之处还有一个地方,在更新资源时,需要很多步逻辑很乱的操作:

①把需要更新的数据取出来映射成Dto;

②更新这个Dto的数据;

③把更新后的Dto再映射回Model层;

而用AutoMapper只需要一部的操作:

注意:在使用TouristRouteForUpdateDto与TouristRoute映射之前一定要先把映射的数据模型添加到ProFile文件中:

CreateMap<TouristRouteForUpdateDto, TouristRoute>();

这个是HttpPut请求更新资源的controller,更新时会把数据全局更新,如果没有传入的数据进行更新,系统则会默认为null,而部分更新需用用到HttpPatch,至于怎么用,后面的文章中会提到;

原文地址:https://www.cnblogs.com/jf-ace/p/14648735.html