Использование Automapper (.net c #) для отображения на переменную не в Src для использования в классах linq2sql? - PullRequest
2 голосов
/ 23 августа 2009

В последнее время я довольно успешно пользуюсь automapper, но я столкнулся с небольшой проблемой для сопоставления Dest с переменной, недоступной в Src .... Пример объясняет это лучше ... в основном я сопоставляю с dest to src согласно инструкциям .. все работает хорошо, но мне нужно теперь сопоставить пункт назначения с переменной с именемservationNumber, который является локальной переменной, а не частью ORDER ... кто-нибудь знает, как это сделать ??

Я использую automapper для сопоставления от заказа до резервирования для использования в linq2sql, так как Reservation - это мой класс 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);

1 Ответ

3 голосов
/ 23 августа 2009

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

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

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

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

...