2017-04-21 65 views
1

我有以下类别:如何有条件地映射到不同的属性?

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

我怎样才能改变以下映射,使Person映射到Manager如果PersonManager类型的?

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(); 

回答

2

添加以下映射:

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

而且你需要把状态在创建的映射是这样的:

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

对于上面的映射,ReverseMap将无法​​正常工作。你需要明确地设置这样的反向映射:

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

希望这会有所帮助。

相关问题