Usando AutoMapper (.net c #) para mapear a uma variável não em Src para uso em aulas de Linq2Sql?
-
19-09-2019 - |
Pergunta
Eu tenho usado AutoMapper muito sucesso ultimamente, mas eu vim através de um pequeno problema para mapear o Dest a uma variável não um disponível no Src .... Um exemplo explica melhor .. Basicamente eu estou mapeamento a partir dest para src, conforme as instruções .. tudo funcionando bem, mas eu preciso agora mapear um destino para uma variável chamada reservationNumber que é variável local não faz parte da ordem ... alguém sabe como fazer isso ??
Eu estou usando AutoMapper para mapear de forma a reserva para uso em linq2sql como reserva minha classe linq2sql.
O pequeno exemplo, eu gostaria de receber qualquer entrada.
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);
Solução
Tente isto:
Mapper.CreateMap<Order, Reservation>()
.ForMember(dest => dest.ReservationNumber, opt => opt.MapFrom(src => reservationNumber));
Essa opção MapFrom toma qualquer Func. Suas outras opções seria mapear a um objeto de destino existente, com o número de reserva já está lá. Ou, use um resolvedor valor personalizado (ResolveUsing), se você precisa para obter o número de reserva usando um serviço personalizado ou algo assim.
A chamada CreateMap só deve acontecer uma vez por AppDomain, de modo que você pode querer verificar as outras duas opções e ver se eles se encaixam às suas necessidades.