2009-08-23 1 views
2

Я использую automapper довольно успешно в последнее время, но я столкнулся с небольшой проблемой для сопоставления Dest с переменной, недоступной в Src. Пример объясняет это лучше .. в основном я сопоставляю от dest до src в соответствии с инструкциями .. все хорошо работает, но мне нужно теперь нанести адрес назначения на переменную с именем reserveNumber, которая является локальной переменной, не являющейся частью ORDER ... кто-нибудь знает, как это сделать?Использование Automapper (.net C#) для сопоставления с переменной не в Src для использования в классах linq2sql?

Я использую autoapper для сопоставления от заказа до резервирования для использования в linq2sql, поскольку резервирование - это мой класс linq2sql.

Является небольшим примером, я был бы признателен за любой вход.

string reservationNumber = "1234567890"; // this is the local variable.. It will be dynamic in future.. 

    Mapper.CreateMap<Order, Reservation>() 
      .ForMember(dest => dest.ReservationNumber, reservationNumber // THIS OBVIOUSLY FAILS) 
      .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.name)) 
      .ForMember(dest => dest.Surname1, opt => opt.MapFrom(src => src.surname1)) 
      .ForMember(dest => dest.Surname2, opt => opt.MapFrom(src => src.surname2)) 
      .ForMember(dest => dest.Email, opt => opt.MapFrom(src => src.email)) 
      .ForMember(dest => dest.Telephone, opt => opt.MapFrom(src => src.telephone)) 
    ; 
      // Perform mapping 
      Reservation reservation = Mapper.Map<Order, Reservation>(order); 

ответ

3

Попробуйте это:

Mapper.CreateMap<Order, Reservation>() 
    .ForMember(dest => dest.ReservationNumber, opt => opt.MapFrom(src => reservationNumber)); 

Этот вариант MapFrom принимает любое Func. Вашими другими параметрами будет сопоставление с существующим объектом назначения, причем номер резервирования уже существует. Или используйте специальный преобразователь значений (ResolveUsing), если вам нужно получить номер бронирования с помощью настраиваемой службы или чего-то еще.

Звонок CreateMap требуется только один раз для AppDomain, поэтому вы можете проверить другие два варианта и посмотреть, соответствуют ли они вашим потребностям.

+0

Спасибо, Джимми работает! –

Смежные вопросы