Estoy trabajando con AutoMapper y algunos de los valores de la entidad a la que se asigna son variables en mi método actual. He intentado buscarlo en Google pero fue en vano. ¿Puedo pasar un conjunto de pares de valores clave o un objeto o algo a mi asignación para que use esos valores?
//comment variable is a Comment class instance var imageComment = AutoMapper.Mapper.Map<Data.ImageComment>(comment); //I want to pass in imageId so I dont have to manually add it after the mapping imageComment.ImageId = imageId;
AutoMapper maneja este escenario de par clave-valor de manera inmediata.
Mapper.CreateMap<Source, Dest>() .ForMember(d => d.Foo, opt => opt.ResolveUsing(res => res.Context.Options.Items["Foo"]));
Luego en tiempo de ejecución:
Mapper.Map<Source, Dest>(src, opt => opt.Items["Foo"] = "Bar");
Un poco detallado para profundizar en los elementos de contexto, pero ahí lo tienes.
A partir de la versión 8.0.0, se modificó la API de AutoMapper. Al hacerlo, ResolveUsing
se consolidó con MapFrom
. Eche un vistazo a la solicitud de extracción correspondiente para obtener más información.
Perfil
public class CoreProfile : Profile { public CoreProfile() { CreateMap<Source, Destination>() .ForMember(d => d.Bar, opt => opt.MapFrom( (src, dst, _, context) => context.Options.Items["bar"] ) ); } }
Cartografía
var destination = mapper.Map<Destination>( source,opt => { opt.Items["bar"] = "baz"; } );
Para Automapper 6.0.2:
Perfil:
public class CoreProfile : Profile { public CoreProfile() { CreateMap<Source, Dest>() .ForMember(d => d.Foo, opt => opt.ResolveUsing( (src, dst, arg3, context) => context.Options.Items["Foo"] ) ); } }
Cartografía:
var result = Mapper.Map<PlanResult>(aa, opt => { opt.Items["Foo"] = 2; opt.Items["OtherFoo"] = 1000; });