ASP.NET Core实现对象自动映射-AgileMapper

上下观古今,起伏千万途。这篇文章主要讲述ASP.NET Core实现对象自动映射-AgileMapper相关的知识,希望能为你提供帮助。
原文:ASP.NET Core实现对象自动映射-AgileMapper我们为什么要在对象之间做映射
处于耦合性或者安全性考虑或者性能考虑我们不希望将Model模型传递给他们,我们会在项目中创建一些DTO(Data transfer object数据传输对象),进行数据的传输.
概述
AgileMapper是一个零配置、高度可配置的对象-对象映射器,具有可查看的执行计划,目标是.NET Standard 1.0+和.NET 3.5+.他执行查询映射、对象创建、深度克隆、id感知更新和合并,可以通过扩展方法、静态API或实例API使用.
快速开始
通过NuGet安装AgileMapper

PM> Install-Package AgileObjects.AgileMapper

 
基本用法
对象创建
  使用以下方法从另一个创建对象
?
123var customer = Mapper.Map(customerViewModel).ToANew< Customer> (); // Or:var customer = customerViewModel.Map().ToANew< Customer> ();
查询映射
使用实体到另一个类型的使用
?
1234var customerVm = await dbContext        .Customers        .Project().To< CustomerViewModel> ()        .FirstAsync(c => c.Id == customerId);
深度克隆
?
123var clonedCustomer = Mapper.DeepClone(customerToBeCloned); // Or:var clonedCustomer = customerToBeCloned.DeepClone();
更新
使用一下命令更新对象的成员与另一个值
?
123Mapper.Map(customerSaveRequest).Over(customer); // Or:customerSaveRequest.Map().Over(customer);
合并
使用以下方法将对象未填充成员与另一个的值合并
?
123Mapper.Map(customerDto).OnTo(customer); // Or:customerDto.Map().OnTo(customer);
忽略成员
  其中有没有目标成员匹配,兼容源成员默认情况下忽略,但你也可以告诉映射器忽略他.
?
01020304050607080910public class OrderDto{        public int Id { get; set; }}  public class Order{        public int? Id { get; set; }        public DateTime DateCreated { get; set; }}
Order.DateCreated将被忽略,因为OrderDto没有匹配到,但是Id属性将被更新,这一块可以停止更新
?
1234Mapper.WhenMapping        .From< OrderDto> ()    // 从OrderDto映射        .To< Order> ()              // 将忽略订单创建更新合并        .Ignore(o => o.Id); // 忽略了Id属性
忽略多个字段,并且成立忽略条件
?
123456Mapper        .Map(orderDto).Over(order, cfg => cfg                .If((dto, o) => dto.Id == 0) // 忽略 OrderDto.Id为0                .Ignore(                        o => o.Id,                        o => o.DateCreated);         // 忽略Id和DateCreated
空结果
如果目标类成员没有匹配到,可以将他映射为null
例如:
?
123var source = new { Name = "Frank" }; var target = new Person { Name = "Charlie", Address = default(Address) }; Mapper.Map(source).Over(target);
【ASP.NET Core实现对象自动映射-AgileMapper】配置复杂类型返回null不进行实例化
?
123456Mapper.WhenMapping        .ToANew< Address> ()        .If((o, a) =>                 string.IsNullOrWhiteSpace(a.Line1) ||                 string.IsNullOrWhiteSpace(a.Postcode))        .MapToNull();


    推荐阅读