web-dev-qa-db-fra.com

Comment spécifier une règle de mappage lorsque les noms de propriétés diffèrent

Je suis un débutant dans le cadre Automapper. J'ai une classe de domaine et une classe DTO comme suit:

public class Employee
{
   public long Id {get;set;}
   public string Name {get;set;}
   public string Phone {get;set;}
   public string Fax {get;set;}
   public DateTime DateOfBirth {get;set;}
}

public class EmployeeDto
{
   public long Id {get;set;}
   public string FullName {get;set;}
   public DateTime DateOfBirth {get;set;}
}

Remarque: Le nom de la propriété "Nom" de Employee classe n’est pas identique à celui de la propriété "Nom complet" de EmployeeDto classe. .

Et voici le code pour mapper l'objet Employee à EmployeeDto:

Mapper.CreateMap<Employee, EmployeeDto>(); // code line (***)
EmployeeDto dto = Mapper.Map<Employee, EmployeeDto>(employee); 

Ma question est la suivante: si je veux mapper Employee (classe source) à EmployeeDto (classe de destination), comment puis-je spécifier la règle de mappage? En d'autres termes, comment dois-je faire plus avec la ligne de code (***) ci-dessus?

128
Thomas.Benz

Qu'à cela ne tienne, j'ai moi-même trouvé une solution:

Mapper.CreateMap<Employee, EmployeeDto>()
    .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name));
259
Thomas.Benz

Vraiment vieux fil, mais juste pour incorporer les commentaires ci-dessus dans une approche mise à jour avec Automapper 8.1 + ...

var mapConfig = new MapperConfiguration(
   cfg => cfg.CreateMap<Employee, EmployeeDto>()
      .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name))
);

Ensuite, vous construirez le mappeur à l'aide de mapConfig:

var mapper = mapConfig.CreateMapper();
0
ebol2000