美文网首页.NETdotNET
03.AutoMapper 之反向映射与逆向扁平化(Revers

03.AutoMapper 之反向映射与逆向扁平化(Revers

作者: 做人生的CEO | 来源:发表于2019-01-01 11:21 被阅读3次

反向映射与逆向扁平化(Reverse Mapping and Unflattening)

AutoMapper现在支持更丰富的反向映射支持。 假设有以下实体:

public class Order {
  public decimal Total { get; set; }
  public Customer Customer { get; set; }
}

public class Customer {
  public string Name { get; set; }
}

我们可以将它扁平化为以下DTO:

public class OrderDto {
  public decimal Total { get; set; }
  public string CustomerName { get; set; }
}

我们可以双向映射,包括逆向扁平化:

Mapper.Initialize(cfg => {
  cfg.CreateMap<Order, OrderDto>()
     .ReverseMap();
});

AutoMapper通过调用ReverseMap创建了反向映射配置,其中包括逆向扁平化:

var customer = new Customer {
  Name = "Bob"
};

var order = new Order {
  Customer = customer,
  Total = 15.8m
};

var orderDto = Mapper.Map<Order, OrderDto>(order);

orderDto.CustomerName = "Joe";

Mapper.Map(orderDto, order);

order.Customer.Name.ShouldEqual("Joe");

逆向扁平化仅针对ReverseMap进行配置。 如果你想要逆向扁平化,你必须配置Entity - > Dto然后调用ReverseMapDto - > Entity创建一个逆向扁平化类型的映射配置。

自定义反向映射

AutoMapper将根据原始扁平化规则自动将CustomerName映射为Customer.Name。 如果使用了MapFromAutoMapper将根据实际配置尝试反向映射:

cfg.CreateMap<Order, OrderDto>()
  .ForMember(d => d.CustomerName, opt => opt.MapFrom(src => src.Customer.Name))
  .ReverseMap();

只要MapFrom路径是成员访问器,AutoMapper就会从同一路径反向映射(CustomerName => Customer.Name)。

如果要自定义反向映射路径,可以使用ForPath

cfg.CreateMap<Order, OrderDto>()
  .ForMember(d => d.CustomerName, opt => opt.MapFrom(src => src.Customer.Name))
  .ReverseMap()
  .ForPath(s => s.Customer.Name, opt => opt.MapFrom(src => src.CustomerName));

上面的列子没有多大意义,因为原始MapFrom会自动反向映射。只有在映射和反向映射路径不同时才使用ForPath进行设置。

如果不想要逆向扁平化行为,可以不调用ReverseMap,然后单独创建两个映射配置。 或者使用Ignore

cfg.CreateMap<Order, OrderDto>()
  .ForMember(d => d.CustomerName, opt => opt.MapFrom(src => src.Customer.Name))
  .ReverseMap()
  .ForPath(s => s.Customer.Name, opt => opt.Ignore());

相关文章

  • 03.AutoMapper 之反向映射与逆向扁平化(Revers

    反向映射与逆向扁平化(Reverse Mapping and Unflattening) AutoMapper现在...

  • 反向映射

    枚举类型被编译成一个对象,它包含了正向映射( name -> value)和反向映射( value -> name...

  • 破解第一个Android程序

    本文是个人学习《Android软件安全与逆向分析》一书整理所得 逆向工程(又称反向工程),是一种技术过程,即对一项...

  • 逆向思维让“红海”变为“蓝海”

    逆向思维又叫求异思维、反向思维 ,通常能解决一些常规思维不能解决的问题。 01 逆向思维解决问题的方法与常规思维相...

  • 2017-12-29

    什么叫逆向思维?是指对常规思维的背离,即反向行之,对现成的结论进行逆向揄,一般有三种方法: 换位思考法; 换角度思...

  • Mybatis反向工程工具

    简介 Mybatis反向工程可以通过数据库的表反向自动生成实体类以及Mapper映射文件与接口,并且对应生成了一些...

  • 自己使用的几个思维和思考工具

    一、逆向思维 以效果为导向反向推导 二、SWOT分析

  • 线路板抄板步骤

    B逆向设计或PCB反向研发。 即在已经有电子产品实物和电路板实物的前提下,利用反向研发技术手段对电路板进行逆向解析...

  • MyBatis逆向工程

    逆向工程字面意思就是反向生成工程, 和 Hibernate一样, MyBatis也有自己的逆向工程工具。详细信息请...

  • iOS逆向之反HOOK的基本防护

    iOS逆向之Method Swizzle iOS逆向之fishHook原理探究 iOS逆向之fishHook怎么通...

网友评论

    本文标题:03.AutoMapper 之反向映射与逆向扁平化(Revers

    本文链接:https://www.haomeiwen.com/subject/fzuvlqtx.html