AutoMapper

摘要:
扩展方法//////类型映射,默认字段名是一对一对应的/////转换后的模型,可以理解为viewmodel///要转换的实体,实体//可以使用

扩展方法

/// <summary>
        ///  类型映射,默认字段名字一一对应
        /// </summary>
        /// <typeparam name="TDestination">转化之后的model,可以理解为viewmodel</typeparam>
        /// <typeparam name="TSource">要被转化的实体,Entity</typeparam>
        /// <param name="source">可以使用这个扩展方法的类型,任何引用类型</param>
        /// <returns>转化之后的实体</returns>
        public static TDestination MapTo<TDestination, TSource>(this TSource source)
            where TDestination : class
            where TSource : class
        {
            if (source == null) return default(TDestination);
            var config = new MapperConfiguration(cfg => cfg.CreateMap<TSource, TDestination>());
            var mapper = config.CreateMapper();
            return mapper.Map<TDestination>(source);
        }

使用方式

var source1 = new Source1
                {
                    Name = "source",
                    Sub = new SubSource1 { Age = "25" },
                    c = "c",
                    GetA = "A",
                    SetB = "B"
                };

                var destViewModel = source1.MapTo<Source1,Dest1>();

高级用法:

var config2 = new MapperConfiguration(
                    cfg => cfg.CreateMap<SourceUser, DestUser2>()
                        .ForMember(d => d.DestName, opt => opt.MapFrom(s => s.Name))    //指定字段一一对应
                        .ForMember(d => d.Birthday, opt => opt.MapFrom(src => src.Birthday.ToString("yy-MM-dd HH:mm")))//指定字段,并转化指定的格式
                        .ForMember(d => d.Age, opt => opt.Condition(src => src.Age > 5))//条件赋值
                        .ForMember(d => d.A1, opt => opt.Ignore())//忽略该字段,不给该字段赋值
                        .ForMember(d => d.A1, opt => opt.NullSubstitute("Default Value"))//如果源字段值为空,则赋值为 Default Value
                        .ForMember(d => d.A1, opt => opt.MapFrom(src => src.Name + src.Age * 3 + src.Birthday.ToString("d"))));//可以自己随意组合赋值
                var mapper2 = config2.CreateMapper();

list转化

/// <summary>
        /// 集合列表类型映射,默认字段名字一一对应
        /// </summary>
        /// <typeparam name="TDestination">转化之后的model,可以理解为viewmodel</typeparam>
        /// <typeparam name="TSource">要被转化的实体,Entity</typeparam>
        /// <param name="source">可以使用这个扩展方法的类型,任何引用类型</param>
        /// <returns>转化之后的实体列表</returns>
        public static IEnumerable<TDestination> MapToList<TSource,TDestination>(this IEnumerable<TSource> source)
            where TDestination : class
            where TSource : class
        {
            if (source == null) return new List<TDestination>();
            var config = new MapperConfiguration(cfg => cfg.CreateMap<TSource, TDestination>());
            var mapper = config.CreateMapper();
            return mapper.Map<List<TDestination>>(source);
        }

使用方式

var source1 = new Source1
                {
                    Name = "source",
                    Sub = new SubSource1 { Age = "25" },
                    c = "c",
                    GetA = "A",
                    SetB = "B"
                };
          var source3 = new Source1
                {
                    Name = "source3",
                    Sub = new SubSource1 { Age = "253" },
                    c = "c3",
                    GetA = "A3",
                    SetB = "B3"
                };
                var sourceList = new List<Source1> { source1, source3 };
                var destViewModelList = sourceList.MapToList<Source1,Dest1>();

免责声明:文章转载自《AutoMapper》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇svg标签元素定位最有效的办法消息机制、子窗口和父窗口的消息传递下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

c# AutoMapper 扩展

下面直接上代码 扩展方法 public static class Ext { #region 对象或集合,字段不一致 自定义转换规则 Mapping /// <summary> /// 集合列表类型映射,默认字段名字一一对应 /// </summary>...

tk.mybatis 报错:tk.mybatis.mapper.MapperException: tk.mybatis.mapper.MapperException: java.lang.StringIndexOutOfBoundsException: String index out of range: -1

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'apiLogMapper' defined in file : Invocation of init method failed; nested exception is tk.my...

[JavaWeb]SpringSecurity-OAuth2.0 统一认证、资源分离的配置,用于分布式架构、模块化开发的认证体系

前言 关于 OAuth2.0的认证体系,翻阅了好多资料,RCF 文档太多,看了一半就看不下去了,毕竟全英文的文档看起来,是有一点让我烦躁,但也对 OAuth2.0的认证流程有了一个基本的概念,之前用 SpringSecurity 做了一个基于 RBAC 的权限管理系统的基础配置,所以对 SpringSecurity 算是比较了解了,于是 OAuth2.0...

【json的处理】二、Jackson的处理

目前处理json的方法有很多,这里主要总结四种方法 1. Gson方式处理json 【json的处理】一、Gson处理 2. FastJson方式处理json 【json的处理】三、FastJson的处理 3. Jackson方式处理json 【json的处理】二、Jackson的处理 4. json-flattener方式处理json 【json的处理】...

12、MyBatis教程之缓存

13、缓存 简介 1、什么是缓存 [ Cache ]? 存在内存中的临时数据。 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。 2、为什么使用缓存? 减少和数据库的交互次数,减少系统开销,提高系统效率。 3、什么样的数据能使用缓存? 经常查询...

Linux系统挂载未分配硬盘空间

先查看未挂载之前的磁盘使用情况 发现磁盘使用率已经达到了96%,迫切需要扩容 查看分区情况fdisk –l 首先确保有可分配的磁盘空间 发现/dev/vda下有400多个G 的空间 所以将/dev/vda下的空间划分给/dev/mapper/centos-root ,即 / 目录 下面,我们要开始增加分区的操作了 1.首先如下命令: fdisk /d...