2013-02-08 5 views
97

Sono un principiante del framework Automapper. Ho una classe di dominio e una classe DTO come segue:Come specificare la regola di mappatura quando i nomi delle proprietà differiscono

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;} 
} 

Nota: Il nome della proprietà "Nome" di Employee classe non è la stessa di quella dei beni "FullName" di EmployeeDto di classe.

Ed ecco il codice per mappare il Employee oggetto da EmployeeDto:

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

La mia domanda è: Se voglio mappare Employee (classe di origine) per EmployeeDto (classe di destinazione), come posso specificare la mappatura regola? In altre parole, come dovrei fare di più con la riga di codice (***) sopra?

risposta

200

Non importa, mi sono trovato una soluzione:

Mapper.CreateMap<Employee, EmployeeDto>() 
    .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name)); 
+1

C'è un modo per specificare globalmente per qualsiasi classe, qualcosa di simile a cosa prefisso/suffisso? Ad esempio, ho un sacco di classi per una libreria che ha proprietà "Localizzazioni" ciascuna. E voglio mapparli alle classi in cui la proprietà corrispondente è chiamata "LocalizedName". La mia unica opzione è aggiungere ForMember a ciascuna configurazione di mapping? – NickAb

+2

non esiste alcun metodo CreateMap nella classe Mapper :( –

+1

@ Navid_pdp11 sì sì. È necessario che la classe statica Mapper non sia un'istanza –