反向映射 matlab,03.AutoMapper 之反向映射与逆向扁平化(Reverse Mapping and Unflattening)...

反向映射与逆向扁平化(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()

.ReverseMap();

});

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

Name = "Bob"};var order = new Order {

Customer = customer,

Total = 15.8m

};var orderDto = Mapper.Map(order);

orderDto.CustomerName = "Joe";

Mapper.Map(orderDto, order);

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

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

自定义反向映射

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

.ForMember(d => d.CustomerName, opt => opt.MapFrom(src => src.Customer.Name))

.ReverseMap();

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

如果要自定义反向映射路径,可以使用ForPath:cfg.CreateMap()

.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()

.ForMember(d => d.CustomerName, opt => opt.MapFrom(src => src.Customer.Name))

.ReverseMap()

.ForPath(s => s.Customer.Name, opt => opt.Ignore());

作者:这个用户有点逗

链接:https://www.jianshu.com/p/d72400b337e0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值