Estou tentando configurar o AutoMapper para converter de Entidade em DTO. Sei que devo usar o .ForMember()
after Mapper.CreateMap<Entity, DTO>()
para configurar mapeamentos personalizados, mas esse não parece ser um método disponível.
Edite para esclarecimento: Não estou procurando um link para a documentação que li, ou uma explicação da sintaxe básica. Estou usando a sintaxe correta conforme descrito nas respostas e na documentação, por exemplo:
Mapper.CreateMap<EFAddress, Address>()
.ForMember(dest => dest.Code, opt => opt.MapFrom(src => src.Name));
Se eu tiver um nome de tipo inválido em CreateMap <>, posso ver "ForMember" como um método válido, passar o mouse mostra a assinatura do método como eu normalmente esperaria. Mas assim que eu dou dois tipos válidos, ForMember diz que ele não pode resolver o símbolo, como se o método não estivesse disponível.
Existe algum tipo de restrição nas classes genéricas que não estou atendendo?
obrigado
fonte
Mapper.CreateMap<Source, Dest>()
métodos estáticos referenciados em todas as respostas abaixo estão agora (2016) marcados como obsoletos .Respostas:
Experimente a seguinte sintaxe:
Mapper .CreateMap<Entity, EntityDto>() .ForMember( dest => dest.SomeDestinationProperty, opt => opt.MapFrom(src => src.SomeSourceProperty) );
ou se as propriedades de origem e destino têm os mesmos nomes simplesmente:
Mapper.CreateMap<Entity, EntityDto>();
Verifique as seções relevantes da documentação para obter mais detalhes e outros cenários de mapeamento.
fonte
No final, acredito que isso acabou sendo algum tipo de incompatibilidade com o ReSharper.
O ReSharper parece ter causado a exibição incorreta do código do Automapper, mas funciona perfeitamente (embora apareça em vermelho com mensagens de erro). A desinstalação do ReSharper corrigiu esse problema completamente.
fonte
uma implementação de amostra seria a seguinte:
Mapper.CreateMap<Game, GameViewModel>() .ForMember(m => m.GameType, opt => opt.MapFrom(src => src.Type))
Precisamos mapear essa propriedade, pois os nomes das propriedades de Game e GameViewModel são diferentes - se eles forem iguais e do mesmo tipo, não será necessário um ForMember
outro uso do ForMember é ignorar mapeamentos
Mapper.CreateMap<Game, GameViewModel>() .ForMember(dest => dest.Prize, opt => opt.Ignore());
fonte
Este uso, bem como:
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();
fonte
Você está fazendo assim
Mapper.CreateMap<SourceType,DestinationType>().ForMember(What ever mapping in here)
Esta página tem alguns bons exemplos
fonte