J'essaie de mapper des objets avec des membres multi-niveaux: Ce sont les classes:
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; }
}
Voici comment j'essaie d'automatap it:
AutoMapper.Mapper.CreateMap<FatherModel , Father>()
.ForMember(dest => dest.Son.Id, opt => opt.MapFrom(src => src.SonId));
c'est l'exception que je reçois:
L'expression 'dest => Convert (dest.Son.Id)' doit être résolue au niveau supérieur. membre et non les propriétés d'un objet enfant. Utilisez un résolveur personnalisé sur le type enfant ou l'option AfterMap à la place. Le nom du paramètre: lambdaExpression
Merci
Cela fonctionnera à la fois pour le mappage vers un objet nouveau ou existant.
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 cela devient plus complexe, vous pouvez écrire une classe ValueResolver, voir exemple ici- http://automapper.codeplex.com/wikipage?title=Custom%20Value%20Resolvers
Utilisez ForPath plutôt que ForMember & Cela fonctionne comme par magie.