2017-04-21 10 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(); 

そして、あなたは、このようなマッピングを作成するときに条件を配置する必要があります: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)); 

を。明示的に逆のマッピングを次のように設定する必要があります。

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

希望します。

関連する問題