Как использовать AutoMapper.ForMember?
Я пытаюсь настроить AutoMapper для преобразования из Entity в DTO. Я знаю, что я должен использовать .ForMember()
после Mapper.CreateMap<Entity, DTO>()
для настройки пользовательских сопоставлений, но это не похоже на доступный метод.
Изменить для уточнения:
Я не ищу ссылку на документацию, которую я прочитал, или объяснение базового синтаксиса. Я использую правильный синтаксис, как описано в ответах и документации, например:
Mapper.CreateMap<EFAddress, Address>()
.ForMember(dest => dest.Code, opt => opt.MapFrom(src => src.Name));
Если у меня есть недопустимое имя типа в CreateMap < > , я могу видеть "ForMember" как допустимый метод, mousing over показывает подпись метода, как я обычно ожидал. Но как только я даю ему два допустимых типа, ForMember говорит, что он не может разрешить символ, как будто этот метод недоступен.
Есть ли какое-то ограничение для общих классов, которые я не встречаю?
Спасибо
Ответы
Ответ 1
В конце концов, я считаю, что это оказалось какой-то несовместимостью с ReSharper.
ReSharper, по-видимому, вызвал неправильный вывод кода Automapper, но работает нормально (хотя он отображает красный цвет с сообщениями об ошибках). Удаление ReSharper полностью устраняет эту проблему.
Ответ 2
Попробуйте использовать следующий синтаксис:
Mapper
.CreateMap<Entity, EntityDto>()
.ForMember(
dest => dest.SomeDestinationProperty,
opt => opt.MapFrom(src => src.SomeSourceProperty)
);
или если исходные и целевые свойства имеют одинаковые имена:
Mapper.CreateMap<Entity, EntityDto>();
Пожалуйста, ознакомьтесь с соответствующими разделами документации для получения более подробной информации и других сценариев сопоставления.
Ответ 3
пример реализации будет следующим:
Mapper.CreateMap<Game, GameViewModel>()
.ForMember(m => m.GameType, opt => opt.MapFrom(src => src.Type))
Нам нужно отобразить это свойство, так как имена свойств Game и GameViewModel различны - если они одинаковы и одного типа, тогда ему не понадобится ForMember
другое использование ForMember - игнорировать сопоставления
Mapper.CreateMap<Game, GameViewModel>()
.ForMember(dest => dest.Prize, opt => opt.Ignore());
Ответ 4
Вы делаете это так:
Mapper.CreateMap<SourceType,DestinationType>().ForMember(What ever mapping in here)
Эта страница содержит несколько хороших примеров