- OOM
Object-Object-Mapping实体间相互转换 - AutoMapper
AutoMapper官方的解释:
AutoMapper是一个对象-对象映射器。对象-对象映射通过将一种类型的输入对象转换为另一种类型的输出对象来工作。
使AutoMapper变得有趣的是,它提供了一些有趣的约定,以免去搞清楚如何将类型A映射为类型B。只要类型B遵循AutoMapper既定的约定,就需要几乎零配置来映射两个类型。
官网地址:https://docs.automapper.org/en/stable/Getting-started.html
其实就是AutoMapper帮助你无需手动的转换实体间关系
添加AutoMapper
引入NuGet包 AutoMapper.Extensions.Microsoft.DependencyInjection
注入AutoMapper的服务
AddAutoMapper 将会自动扫描程序集里所有包含映射关系的Profile文件
然后通过 AppDomain.CurrentDomain.GetAssemblies() automapper会加载到AppDomain中
实体
使用AutoMapper创建实体之间的关系,定义类继承 Profile
CreateMap<原对象,映射目标对象>;
.ReverseMap 相互转换映射
在Controller中使用AutoMapper并调用
集合时加List _mapper.Map<List<目标对象>>(数据);
查看测试结果
其他方法
如果映射字段不一致
CreateMap<TouristRoute, TouristRouteDto>().ForMember(dest => dest.Price, opt => opt.MapFrom(src => src
.OriginalPrice));
或者需要计算
CreateMap<TouristRoute, TouristRouteDto>().ForMember(dest => dest.Price, opt => opt.MapFrom(src => src
.OriginalPrice * (decimal)(src.DiscountPresent ?? 1))).ReverseMap();
不想映射某个字段
CreateMap<TouristRoute, TouristRouteDto>().ForMember(d=>d.Title,o=>o.Ignore());
字符串为空处理/替换
CreateMap<TouristRoute,TouristRouteDto>().ForMember(d=>d.Title,o=>o.NullSubstitute("No data"));
条件映射
CreateMap<TouristRoute,TouristRouteDto>().ForMember(d=>d.Title,o=>o.Condition(l=>!string.IsNullOrWhiteSpace(l.Title)));
前提条件映射(相比条件映射 运行更快,并且先调用条件,后分配值,还可以对操作值[Split...])
CreateMap<TouristRoute,TouristRouteDto>().ForMember(d=>d.Title,o=>{o.PreCondition(l=>!string.isNullOrWhiteSpace(l.Title));o.MapFrom(l=>l.Title)})