Estoy tratando de configurar AutoMapper para convertir de Entity a DTO. Sé que se supone que debo usar .ForMember()
after Mapper.CreateMap<Entity, DTO>()
para configurar asignaciones personalizadas, pero este no parece ser un método disponible.
Edite para aclarar: no estoy buscando un enlace a la documentación, que he leído, o una explicación de la sintaxis básica. Estoy usando la sintaxis correcta como se describe en las respuestas y la documentación, por ejemplo:
Mapper.CreateMap<EFAddress, Address>()
.ForMember(dest => dest.Code, opt => opt.MapFrom(src => src.Name));
Si tengo un nombre de tipo no válido dentro de CreateMap <>, puedo ver "ForMember" como un método válido, al pasar el mouse sobre muestra la firma del método como normalmente esperaría. Pero tan pronto como le doy dos tipos válidos, ForMember dice que no puede resolver el símbolo, como si el método no estuviera disponible.
¿Existe algún tipo de restricción en las clases genéricas que no estoy cumpliendo?
Gracias
fuente
Mapper.CreateMap<Source, Dest>()
métodos estáticos a los que se hace referencia en todas las respuestas a continuación están ahora (2016) marcados como obsoletos .Respuestas:
Pruebe la siguiente sintaxis:
Mapper .CreateMap<Entity, EntityDto>() .ForMember( dest => dest.SomeDestinationProperty, opt => opt.MapFrom(src => src.SomeSourceProperty) );
o si las propiedades de origen y destino tienen los mismos nombres simplemente:
Mapper.CreateMap<Entity, EntityDto>();
Consulte las secciones relevantes de la documentación para obtener más detalles y otros escenarios de mapeo.
fuente
Al final, creo que esto resultó ser algún tipo de incompatibilidad con ReSharper.
ReSharper parece haber causado que el código de Automapper se muestre incorrectamente, pero funciona bien (aunque se muestra en rojo con mensajes de error). La desinstalación de ReSharper solucionó este problema por completo.
fuente
una implementación de muestra sería la siguiente:
Mapper.CreateMap<Game, GameViewModel>() .ForMember(m => m.GameType, opt => opt.MapFrom(src => src.Type))
Necesitamos mapear esta propiedad ya que los nombres de las propiedades de Game y GameViewModel son diferentes; si son iguales y del mismo tipo, entonces no necesitará un ForMember
otro uso de ForMember es ignorar asignaciones
Mapper.CreateMap<Game, GameViewModel>() .ForMember(dest => dest.Prize, opt => opt.Ignore());
fuente
Este uso así 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();
fuente
Lo estás haciendo así
Mapper.CreateMap<SourceType,DestinationType>().ForMember(What ever mapping in here)
Esta página tiene algunos buenos ejemplos
fuente