2013-02-08 4 views
97

Ich bin ein Neuling im Automapper-Framework. Ich habe eine Domain-Klasse und eine Klasse DTO wie folgt:Wie man die Zuordnungsregel angibt, wenn sich die Namen der Eigenschaften unterscheiden

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

Hinweis: Der Name der Eigenschaft „Namen“ von Employee Klasse nicht die gleiche wie die der Eigenschaft „Fullname“ von EmployeeDto Klasse.

Und hier ist der Code zur Karte des Employee Objekt EmployeeDto:

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

Meine Frage ist: Wenn ich Employee (Quellklasse) zu EmployeeDto (Zielklasse) zugeordnet werden soll, wie kann ich die Zuordnung angeben Regel? Mit anderen Worten, wie soll ich mehr mit der obigen Codezeile (***) tun?

Antwort

200

Es macht nichts, fand ich mich um eine Lösung:

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

Gibt es eine Möglichkeit, es für jede Klasse global angeben, so etwas wie Präfix/Suffix Ding? Zum Beispiel habe ich eine Menge Klassen für eine Bibliothek, die jeweils die Eigenschaft "Lokalisierungen" haben. Und ich möchte sie Klassen zuordnen, deren entsprechende Eigenschaft "LocalizedName" heißt. Ist meine einzige Option, ForMember zu jeder Mapping-Konfiguration hinzuzufügen? – NickAb

+2

gibt es keine CreateMap-Methode in Mapper-Klasse :( –

+1

@ Navid_pdp11 ja es gibt. Sie müssen die statische Klasse Mapper keine Instanz haben –

Verwandte Themen