Automapper 从自定义方法创建地图

Jos*_*una 3 .net c# mapping automapper

我有以下课程:

public class Entity
{
      public string Name { get; set; }
}       
public class SomethingDto
{
     public string NameChanged { get; set; }
     public void Mapping(Entity something)
     {
         NameChanged = something.Name;
     }          
}
Run Code Online (Sandbox Code Playgroud)

我想使用 DTO 的映射方法来创建地图,如下所示:

conf.CreateMap<Entity, SomethingDto>().ForMember(t => t.NameChanged, opt => opt.MapFrom(t => t.Name));
Run Code Online (Sandbox Code Playgroud)

AutoMapper 中有一种方法可以使用自定义方法创建地图,谁使用他的投影?

Ken*_*nny 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(现在我假设标识符用于订单),仅包含属性Idas string。然后,您将创建两个自定义类型转换器,如本文所述。