2017-08-23 1 views
2

J'utilise la dernière version de Auto Mapper 6.1.0'. je Poll et PolOption tableaux comme ci-dessous:comment mapper la liste imbriquée à une autre liste avec AutoMapper

public class Poll 
{ 
     public int Id { get; set; } 
     public string Title { get; set; } 
     public string Body { get; set; } 
     public virtual ICollection<PollOption> Options { get; set; } 
} 

public class PollOption 
{ 
    public virtual string Title { get; set; } 
    public int Id { get; set; } 
    public int PollId { get; set; } 
    public virtual Poll Poll { get; set; } 
} 

et moi avons deux viewModels pour ces modèles:

public class EditPollViewModel 
{ 
    public int Id { get; set; } 
    public virtual string Title { get; set; } 
    public List<PollOptionViewModel> Options { get; set; } 
} 
public class PollOptionViewModel 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 

} 

J'utilise cela pour config Auto Mapper:

config.CreateMap<Poll, EditPollViewModel>().ForMember(dest => dest.Options, src => src.MapFrom(t => t.Options)); 

mais quand je cours un projet avec le code ci-dessous, j'ai obtenu une erreur.

return Mapper.Map<EditPollViewModel>(model); 

J'ai obtenu cette erreur:

configuration carte de type manquante ou mappage non pris en charge.

types de cartographie: POLLOPTION -> PollOptionViewModel

POLLOPTION ->

PollOptionViewModel

+0

ajouter ce 'CreateMap () ReverseMap()' et réessayer. –

+0

J'ai essayé cela mais le résultat était le même –

+0

vous faites correspondre 'PollOption' à' PollOptionViewModel'! mais cela n'existe pas dans votre question. –

Répondre

2

vous n'avez pas besoin de membres de carte qui ont le même nom comme Options-Options Automapper faire automatiquement et vous oubliez de mapper PollOption à PollOptionViewModel:

config.CreateMap<PollOption , PollOptionViewModel>().ReverseMap() 

et changer

public List<PollOptionViewModel> Options { get; set; } 

à

public ICollection<PollOptionViewModel> Options { get; set; } 

aussi ajouter ReverseMap() dans votre carte.

config.CreateMap<Poll, EditPollViewModel>().ReverseMap() 
+0

bien. merci Saeed. pourriez-vous me parler de la méthode 'ReverseMap'? –

+1

En appelant 'ReverseMap', AutoMapper crée une configuration de mappage inverse qui inclut le fait de ne pas se lisser. [voir plus] (https://github.com/AutoMapper/AutoMapper/wiki/Reverse-Mapping-and-Unflattening). –