zoukankan      html  css  js  c++  java
  • 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,至于怎么用,后面的文章中会提到;

  • 相关阅读:
    场景设计法
    判定表驱动分析方法
    错误推测法
    Ubuntu软件包管理命令全面集锦
    MySql模糊查询
    VC++ 列表控件的使用方法
    Java笔记原生数据类型【二】
    DEDECMS 关键字不能小于2个字节!
    Linux 使用yum install安装mysql登陆不上解决办法
    PHP数据学习-二维数组【3】
  • 原文地址:https://www.cnblogs.com/jf-ace/p/14648735.html
Copyright © 2011-2022 走看看