Как использовать AutoMapper .ForMember? - PullRequest
72 голосов
/ 08 августа 2011

Я пытаюсь настроить AutoMapper для преобразования из Entity в DTO.Я знаю, что должен использовать .ForMember() после Mapper.CreateMap<Entity, DTO>() для настройки пользовательских сопоставлений, но этот метод, по-видимому, недоступен.

Изменить для пояснения: я не ищуссылка на документацию, которую я прочитал, или объяснение основного синтаксиса.Я использую правильный синтаксис, как описано в ответах и ​​документации, например:

Mapper.CreateMap<EFAddress, Address>()
      .ForMember(dest => dest.Code, opt => opt.MapFrom(src => src.Name));

Если у меня недопустимое имя типа в CreateMap <>, я вижу «ForMember» в качестве допустимого метода, наведя курсор мыши напоказывает сигнатуру метода, как я обычно ожидаю.Но как только я задаю ему два допустимых типа, ForMember говорит, что не может разрешить символ, как если бы метод недоступен.

Есть ли какое-то ограничение на общие классы, с которыми я не встречаюсь?

Спасибо

Ответы [ 5 ]

112 голосов
/ 08 августа 2011

Попробуйте следующий синтаксис:

Mapper
    .CreateMap<Entity, EntityDto>()
    .ForMember(
        dest => dest.SomeDestinationProperty,
        opt => opt.MapFrom(src => src.SomeSourceProperty)
    );

или если свойства источника и назначения имеют одинаковые имена просто:

Mapper.CreateMap<Entity, EntityDto>();

Пожалуйста, ознакомьтесь с соответствующими разделами документации для более подробной информации и других сценариев сопоставления.

15 голосов
/ 12 января 2012

В конце концов, я считаю, что это какая-то несовместимость с ReSharper.

Кажется, что ReSharper вызывал некорректное отображение кода Automapper, но он работал просто отлично (даже если он отображает красный с ошибкойСообщения).Удаление ReSharper решило эту проблему полностью.

7 голосов
/ 08 августа 2011

пример реализации будет выглядеть следующим образом:

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());
0 голосов
/ 04 марта 2019

Это использование, а также:

  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();
0 голосов
/ 08 августа 2011

Вы делаете это так

Mapper.CreateMap<SourceType,DestinationType>().ForMember(What ever mapping in here)

На этой странице есть несколько хороших примеров

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...