Я пытаюсь настроить AutoMapper для преобразования из Entity в DTO. Я знаю, что должен использовать .ForMember()
after Mapper.CreateMap<Entity, DTO>()
для настройки пользовательских сопоставлений, но это не похоже на доступный метод.
Изменить для пояснения: я не ищу ссылку на прочитанную мной документацию или объяснение основного синтаксиса. Я использую правильный синтаксис, как описано в ответах и документации, например:
Mapper.CreateMap<EFAddress, Address>()
.ForMember(dest => dest.Code, opt => opt.MapFrom(src => src.Name));
Если у меня есть недопустимое имя типа в CreateMap <>, я вижу «ForMember» как допустимый метод, при наведении указателя мыши отображается подпись метода, как я обычно ожидал. Но как только я даю ему два допустимых типа, ForMember говорит, что не может разрешить символ, как будто метод недоступен.
Есть ли какие-то ограничения на общие классы, которые я не встречаю?
Благодарность
источник
Mapper.CreateMap<Source, Dest>()
методы, упомянутые во всех ответах ниже, теперь (2016 г.) помечены как устаревшие .Ответы:
Попробуйте следующий синтаксис:
Mapper .CreateMap<Entity, EntityDto>() .ForMember( dest => dest.SomeDestinationProperty, opt => opt.MapFrom(src => src.SomeSourceProperty) );
или если свойства источника и назначения имеют одинаковые имена, просто:
Mapper.CreateMap<Entity, EntityDto>();
Пожалуйста, ознакомьтесь с соответствующими разделами документации для получения более подробной информации и других сценариев сопоставления.
источник
В конце концов, я считаю, что это оказалась какая-то несовместимость с ReSharper.
ReSharper, похоже, привел к неправильному отображению кода Automapper, но работает нормально (даже если он отображается красным цветом с сообщениями об ошибках). Удаление ReSharper полностью устранило эту проблему.
источник
пример реализации будет следующим:
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());
источник
Это использование, а также:
CreateMap<Azmoon, AzmoonViewModel>() .ForMember(d => d.CreatorUserName, m => m.MapFrom(s => s.CreatedBy.UserName)) .ForMember(d => d.LastModifierUserName, m => m.MapFrom(s => s.ModifiedBy.UserName)).IgnoreAllNonExisting();
источник
Ты делаешь это вот так
Mapper.CreateMap<SourceType,DestinationType>().ForMember(What ever mapping in here)
На этой странице есть несколько хороших примеров
источник