一、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会自动映射:[
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)); } }