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/

posted @ 2022-02-12 16:38  码上的飞鱼  阅读(66)  评论(0)    收藏  举报