雪花

Automapper

一、AutoMapper

说明:Automapper是一个object-object mapping(对象映射)工具,一般主要用于两个对象之间数据映射和交换。

二、安装程序集包

1、程序包管理控制台方式

Install-Package AutoMapper

2、Nuget方式

三、实体映射

1、两个实体之间的映射

using AutoMapper;
using System;

namespace ConsoleApp1
{
    class Program
    {
        public class Source
        {
            public int Id { get; set; }
            public string Content { get; set; }
        }
        public class DTOSource
        {
            public int Id { get; set; }
            public string Content { get; set; }
        }
        static void Main(string[] args)
        {
            Mapper.Initialize(x => {
                x.CreateMap<Source, DTOSource>();
            });
            Source s = new Source { Id = 1, Content = "123" };
            DTOSource dto = Mapper.Map<DTOSource>(s);
            Console.WriteLine("");
        }
    }
}

 

 --这是一种最简单的使用,AutoMapper会更加字段名称去自动对于,忽略大小写。

2、两个实体不同字段之间的映射

将DTOSource中的Content的字段名改成Desc,此时只需要建立映射关系时,指定字段就可以了:

using AutoMapper;
using System;

namespace ConsoleApp1
{
    class Program
    {
        public class Source
        {
            public int Id { get; set; }
            public string Content { get; set; }
        }
        public class DTOSource
        {
            public int Id { get; set; }
            public string Desc { get; set; }
        }
        static void Main(string[] args)
        {
            Mapper.Initialize(x => {
                x.CreateMap<Source, DTOSource>().
                    ForMember(c => c.Desc, q => { q.MapFrom(z => z.Content);});
            });

            Source s = new Source { Id = 1, Content = "123" };
            DTOSource dto = Mapper.Map<DTOSource>(s);
            Console.WriteLine("");
        }
    }
}

 

 四、ABP映射

1、手动映射或自动映射

属性什么都一一对应的,automap会自动映射:[AutoMap(typeof(Person))]
2、自定义映射-为了字段不一致的情况下使用自定义映射

 [Table("Person")]
    public class Person : FullAuditedEntity
    {
        public string Name { get; set; }
        public int Sex { get; set; }
    }

 

public class TestPersonDto
    {
        public string Name { get; set; }
         public int Sex { get; set; }
    }

 

 

2.1创建一个PersonMapper映射接口,然后一个一个声明实体之间的映射

  internal static class PersonMapper
    {
        public static void CreateMappings(IMapperConfigurationExpression configuration)
        { //创建
            configuration.CreateMap<TestPersonDto, Person>();
            configuration.CreateMap<Person,TestPersonDto>();
        }

   }

 2.2最后,不要忘记把这个自定义映射在项目名ApplicationModule中的Initialize()方法声明一下

 

 public override void Initialize()
        {
            var thisAssembly = typeof(AbpDemoApplicationModule).GetAssembly();
 
            IocManager.RegisterAssemblyByConvention(thisAssembly);
 
            Configuration.Modules.AbpAutoMapper().Configurators.Add(
                // Scan the assembly for classes which inherit from AutoMapper.Profile
                cfg => {
                    cfg.AddProfiles(thisAssembly);
                    PersonMapper.CreateMappings(cfg);
                }
                  
            );
       }

 

如果字段更改即PersonEditDto的 MyName对应的Person的Name

修改一下我们映射接口

    internal static class PersonMapper
    {
        public static void CreateMappings(IMapperConfigurationExpression configuration)
        { //创建
            configuration.CreateMap<TestPersonDto, Person>().ForMember(a=>a.Name,b=>b.MapFrom(a=>a.MyName));
            configuration.CreateMap<Person, TestPersonDtoo>().ForMember(a=>a.MyName,b=>b.MapFrom(a=>a.Name));
        }
    }

 

posted @ 2019-04-04 11:20  十色  阅读(741)  评论(0编辑  收藏  举报