Как условно сопоставить разные свойства?
У меня есть следующие классы:
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
если Person
имеет тип 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();
1 ответ
Решение
Добавьте следующие сопоставления:
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));
Надеюсь это поможет.