Automapper从自定义方法创建映射

3

我有以下类:

public class Entity
{
      public string Name { get; set; }
}       
public class SomethingDto
{
     public string NameChanged { get; set; }
     public void Mapping(Entity something)
     {
         NameChanged = something.Name;
     }          
}

我想使用DTO的映射方法来创建以下方式的映射:
conf.CreateMap<Entity, SomethingDto>().ForMember(t => t.NameChanged, opt => opt.MapFrom(t => t.Name));

在AutoMapper中有一种方式可以使用自定义方法创建映射,它可以与其投影一起使用吗?

你可以使用构造函数代替。文档 - Lucian Bargaoanu
1个回答

6

您不希望这样做,因为这会使DTO意识到实体,并且这将破坏您所获得的分离。

在这种情况下,行ForMember(t => t.NameChanged,opt => opt.MapFrom(t => t.Name))将起作用,因为NameNameChanged都是string类型。假设您想要执行类似于将类型为string的标识符值'20180120-00123456'映射到目标上的两个属性:一个DateTime属性和一个ProductId属性。你可以这样做两种方式。

简单

您将在进行映射的类中编写两个映射函数,并按以下方式执行:

  • ForMember(t => t.Date,opt => opt.MapFrom(t => RetrieveDate(t.Identifier)))
  • ForMember(t => t.ProductId,opt => opt.MapFrom(t => RetrieveProductId(t.Identifier)))

复杂

您将创建一个名为OrderIdentifier的自定义类(现在我假设标识符是为订单),其中只有Id属性为string。然后您将制作两个自定义类型转换器,就像文章描述的那样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接