关于AutoMApping 实体映射

 

安装AutoMapping包

把订单实体映射成订单DTO实体

 .ReverseMap()加上这个方法后 下面自定义 映射规则  第一个就是来源对象 第二个就是目标对象  

 

 

 

 

https://www.cnblogs.com/fred-bao/p/5700776.html

 

 ABP中 映射三种写法

1.第一种写法 直接在DTO上面写AutoMapper

[AutoMapTo]把当前类映射为Person

[AutoMapForm]把Person映射为当前类

 

 

 

2.第二种写法  创建映射类

在Module中注册

 

3.映射类继承Profile

 

 

相同类型对象进行映射     

使用MapTo() 赋值不会报错   但是映射不成功    只能用MapTo<>()进行类型转换;   相同类型使用MapTo<>()进行映射  映射完成后  两个对象为同一个对象实例

            var aa = new Customer() { Name="张三",CustomerNumber="0001",Phone="150"};
            var cc = new Customer() { Name="王五"};
            aa.MapTo(cc);
            var dd = aa.MapTo<Customer>();

  

 

            CreateMap<OrderInput, SalesOrder>()
                .ForMember(dest => dest.Lines, opt => opt.Ignore());

把OrderInput对象映射为SalesOrder 对象的时候    SalesOrder 中的Lines属性不会被映射    Lines必须要是一个对象    如果只是一个属性就会报错

 

******************************

统一映射

创建映射类  有N个

    public class AccountProfile : Profile, IProfile
    {
        public AccountProfile()
        {
            CreateMap<Account, AccountDto>();
        }

    }

  找到Iprofile接口所在的程序集 

  找到这个程序集中所有继承IProfile的类  

  统一注入映射规则

            var allTypes = typeof(IProfile)
                .Assembly
                .GetTypes()
                .Where(type => type.IsClass)
                .Where(type => typeof(IProfile).GetTypeInfo().IsAssignableFrom(type))
                .ToList();

            Mapper.Initialize(y =>
            {
                foreach (var type in allTypes)
                {
                    y.AddProfiles(type);
                }
            });

  

posted @ 2018-09-29 10:42  几清  阅读(2641)  评论(0编辑  收藏  举报