2017-04-21 8 views
1

ich die folgenden Klassen:Wie kann man verschiedene Eigenschaften bedingt zuordnen?

public Company 
{ 
    public Person Person {get; set;} 
} 

public Person 
{ } 

public Manager : Person 
{ } 

public Salesperson : Person 
{ } 

public CompanyDto 
{ 
    public Manager Manager {get; set;} 
    public Salesperon Salesperon {get; set;} 
} 

Wie kann ich die folgende Abbildung ändern, so dass Person-Manager abgebildet wird, wenn Person vom Typ Manager?

cfg.CreateMap<Company, CompanyDto>() 
    .ForMember(dto => dto.Manager, option => option.MapFrom(model => model.Person)) 
    .ForMember(dto => dto.Salesperon, option => option.MapFrom(model => model.Person)) 
    .ReverseMap(); 

Antwort

2

Add folgende Zuordnungen:

cfg.CreateMap<Person, Manager>().ReverseMap(); 
cfg.CreateMap<Person, Salesperson>().ReverseMap(); 

Und müssen Sie Zustand versetzen, während Zuordnungen wie folgt zu erstellen:

cfg.CreateMap<Company, CompanyDto>() 
    .ForMember(dto => dto.Manager, option => option.MapFrom(model => model.Person is Manager ? model.Person : null)) 
    .ForMember(dto => dto.Salesperon, option => option.MapFrom(model => model.Person is Salesperson ? model.Person : null)); 

Für obige Abbildung, ReverseMap wird nicht funktionieren. Sie müssen die umgekehrten Zuordnungen explizit wie folgt festlegen:

cfg.CreateMap<CompanyDto, Company>() 
    .ForMember(dto => dto.Person, option => option.MapFrom(model => model.Manager != null ? (Person)model.Manager : model.Salesperon)); 

Ich hoffe, dies hilft.

Verwandte Themen