Подтвердить что ты не робот

Как использовать 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 говорит, что он не может разрешить символ, как будто этот метод недоступен.

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

Спасибо

4b9b3361

Ответ 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)

Эта страница содержит несколько хороших примеров