c# - mvc - mapper initialize
Mapeo de niveles profundos utilizando Automapper (2)
Estoy tratando de asignar objetos con miembros de niveles múltiples: estas son las clases:
public class Father
{
public int Id { get; set; }
public Son Son { get; set; }
}
public class FatherModel
{
public int Id { get; set; }
public int SonId { get; set; }
}
public class Son
{
public int Id { get; set; }
}
Así es como lo intento automap:
AutoMapper.Mapper.CreateMap<FatherModel , Father>()
.ForMember(dest => dest.Son.Id, opt => opt.MapFrom(src => src.SonId));
Esta es la excepción que recibo:
La expresión ''dest => Convert (dest.Son.Id)'' debe resolverse en el miembro de nivel superior y no en las propiedades de ningún objeto secundario. Utilice un programa de resolución personalizado en el tipo secundario o la opción AfterMap en su lugar. Nombre del parámetro: lambdaExpression
Gracias
Esto funcionará tanto para la asignación a un objeto nuevo o existente.
Mapper.CreateMap<FatherModel, Father>()
.ForMember(x => x.Son, opt => opt.MapFrom(model => model));
Mapper.CreateMap<FatherModel, Son>()
.ForMember(x => x.Id, opt => opt.MapFrom(model => model.SonId));
AutoMapper.Mapper.CreateMap<FatherModel, Father>()
.ForMember(x => x.Son, opt => opt.ResolveUsing(model => new Son() {Id = model.SonId}));
si se está volviendo más complejo, puede escribir una clase ValueResolver, consulte el ejemplo aquí: http://automapper.codeplex.com/wikipage?title=Custom%20Value%20Resolvers