.net core AutoMapper的简单使用。

AutoMapper主要处理对象与对象之间的映射,减少程序员自己编写代码的工作量,提高开发效率。

应用场景:
假如你想对原始数据,进行部分字段展示,那么你需要创建一个对应的DTO类,进行手动映射,这样太麻烦。所以可以采用自动映射。

一、AutoMapper的安装使用

1.nuget下载如同所示的工具包。AutoMapper.Extensions.Microsoft.DependencyInjection
在这里插入图片描述
2.注入服务依赖。

 //注入自动映射服务   //AppDomain.CurrentDomain.GetAssemblies()获取项目程序集
            //扫秒profile文件  
            //需要nuget  AutoMapper 具体名称看依赖包
            services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());

AddAutoMapper会自动扫描项目中的profiles文件夹,通过profile进行自动映射。
3.在项目中创建profiles文件夹。
在这里插入图片描述
4.创建profile类。

IT课程欢迎咨询qi e:3388486286

    public class TouristRouteProfile:Profile
    {
        //映射配置就是在构造函数完成的
        //AutoMapper 在注入完成后 会自动扫秒Profile 然后通过构造函数完成映射
        public TouristRouteProfile() 
        {
            //CreateMap:
            //第一个参数是模型对象 第二个参数是映射的目标对象
            //俩个对象中相同的字段会自动映射
            ForMember:
            ///第一个参数是 目标对象dto
            ///第二个参数是原始数据模型   进行修改和 赋值给对应的字段
            ///将数据库里的数据通过Molde映射到Dto中 然后展示在界面
            CreateMap<TouristRoute, TouristeRouteDto>().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.TripType,
                opt => opt.MapFrom(src => src.TripType.ToString())
                ).ForMember(
                dest => dest.DepartureCity,
                opt => opt.MapFrom(src => src.DepartureCity.ToString())
                );



            ///上面修改的数据  等同于
            /// Price=touristeRouteFromRepo.Originalprice*(decimal)(touristeRouteFromRepo.DiscountPresent ?? 1),//变量定义中含有两个问号,意思是取所赋值??左边的,如果左边为null,取所赋值??右边的。   DiscountPresent是折扣
            ///  travelDays = touristeRouteFromRepo.travelDays.ToString(),
            /// TripType = touristeRouteFromRepo.TripType.ToString(),
            ///   DepartureCity = touristeRouteFromRepo.DepartureCity.ToString()
            ///   省去了相同字段手动赋值的麻烦
            ///   相同字段和不想修改的数据  可以自动映射

            //将前端接收到的创建数据通过Dto映射到Molde中
            CreateMap<TouristRouteForCreationDto, TouristRoute>().ForMember(
                dest => dest.Id,
                opt => opt.MapFrom(src => Guid.NewGuid())
                );

            CreateMap<TouristRouteForUpdateDto, TouristRoute>();

            CreateMap<TouristRoute, TouristRouteForUpdateDto>();

        }
    }

注意该类,一定要继承Profile类其中CreateMap方法主要就是做关系映射,ForMember是自定义映射的数据格式和类容。MapFrom就是将元数据中的类容做一下转换,给到dest对应的Dto对象。

5.使用。
映射关系做完后,我们可以在控制器中使用了。

     //数据仓库接口
        private ITouristRouteRepository _touristRouteRepository;
        private readonly IMapper _mapper;

        //依赖注入  构造函数注入
        //注入的时候已经实现了ITouristRouteRepository     因为参数类型已经注册到了ioc容器,所以他所对面的实现类会直接返回实例
        public TouristRoutesController(ITouristRouteRepository touristRouteRepository,IMapper mapper) {
            _touristRouteRepository = touristRouteRepository;
            _mapper = mapper;
        }
        
方法() {    ///Map泛型是映射的结果   参数是原始数据
            var touristRouteDto = _mapper.Map<TouristeRouteDto>(touristeRouteFromRepo);

            return Ok(touristRouteDto);}

这样就完成了一个简单的映射关系。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值