#c# #.net-core #automapper
#c# #.net-core #automapper
Вопрос:
Я использую AutoMapper в своем приложении на .net-ядре для создания DTO из моих объектов Nhibernate для отправки клиенту в виде JSON. Однако есть некоторые запросы, по которым мне нужно опустить определенные свойства в моей сущности. Например, предположим, что у меня есть следующие классы:
public class Person
{
public ICollection<Friend> Friends { get; set; }
}
public class PersonDTO
{
public ICollection<FriendDTO> Friends { get; set; }
}
Бывают случаи, когда мне нужно отправить клиенту пользователя со всеми его друзьями, однако иногда мне просто нужен этот человек. У меня есть конфигурация automapper, которая определяет простое сопоставление между Person и PersonDTO без пропущенных свойств, потому что это наиболее распространенный случай. Однако, вместо того, чтобы создавать два отдельных DTO (одно с отображенным свойством Friends, а другое с игнорируемым им), было бы неплохо каким-то образом указать это во время сопоставления. Я пробовал следующее, но, похоже, это не работает:
var personDtoWithoutFriends = _mapper.map<Person, PersonDTO>(person,
opts => opts.ConfigureMap()
.ForMember(dest => dest.Friends, act => act.Ignore()))
Я знаю, что могу решить эту проблему с помощью нескольких DTO, однако это чрезвычайно распространенный шаблон в моем приложении, и в конечном итоге я бы создал большое количество DTO. Игнорирование определенных свойств в тех немногих случаях, когда мне нужно, кажется гораздо более элегантным решением. Я делаю что-то неправильно или это просто невозможно с помощью AutoMapper?
Комментарии:
1. Я не уверен, сработает ли это для вас, но как насчет создания двух разных картографов, одного для сопоставления с друзьями и одного для сопоставления без и переключения между ними, когда это необходимо?