mvc-AutoMapper
1,通过 nuget 添加引用AutoMapper
MapperConfiguration:映射的配置
IMapper:执行映射,依靠方法:Map()
2,在SRV的基类 BaseService 中引入静态构造函数,生成MapperConfiguration
protected static MapperConfiguration autoMapperConfig; static BaseService() { autoMapperConfig = new MapperConfiguration(cfg => { cfg.CreateMap<Suggest, DTOSuggest>(); }); autoMapperConfig.AssertConfigurationIsValid(); }
因为MapConfiguration的生成是比较耗费资源的,所以让其只在启动时生成一次
3,然后,在 BaseService 中引入一个 mapper 属性,供所有子类使用:
protected IMapper mapper { get { return autoMapperConfig.CreateMapper(); } }
mapper是“轻量级”的,一般不需要特别处理。(估计AutoMapper内部也进行了相应的处理,不是每次CreateMapper()就真的new一个)
最后,在SRV的子类中就可以调用:
return mapper.Map<Suggest, DTOSuggest>(suggest); //或者 return mapper.Map<DTOSuggest, Suggest>(dtoSuggest); //再或者:更新自己 mapper.Map<DTOSuggest, Suggest>(dtoSuggest, suggest);
AutoMapper可以自动的映射名称相同(或)的属性。如果名称不同,需要进行配置:
cfg.CreateMap<Suggest, DTOSuggest>() .ForMember(s => s.Title, opt => opt.MapFrom(d => d.Subject)) ;
还可以配置忽略某个属性:
.ForMember(s => s.Title, opt => opt.Ignore())
以及,如果某个属性为null值时的处理方案(AutoMapper不会报NullReferenceException)
.ForMember(s => s.Age, opt => opt.NullSubstitute(-1))
AutoMapper还可以自动映射整个集合。
文章转载自:快速开发平台– 云微平台
地址:https://www.hocode.com/

浙公网安备 33010602011771号