2010-12-07 4 views
18

J'essaie de trouver un moyen de configurer AutoMapper pour définir une propriété dans un objet de destination avec une référence de son objet parent source. Le code ci-dessous montre ce que j'essaie d'accomplir. Je déplace des données dans les instances enfant & parent à partir des objets de données. Le mappage fonctionne correctement pour créer la collection List avec les données correctes, mais j'ai besoin d'un objet ForEach pour affecter la référence d'instance parent.Comment affecter une référence parent à une propriété dans un enfant avec AutoMapper

public class ParentChildMapper 
{ 
    public void MapData(ParentData parentData) 
    { 
     Mapper.CreateMap<ParentData, Parent>(); 
     Mapper.CreateMap<ChildData, Child>(); 

     //Populates both the Parent & List of Child objects: 
     var parent = Mapper.Map<ParentData, Parent>(parentData); 

     //Is there a way of doing this in AutoMapper? 
     foreach (var child in parent.Children) 
     { 
      child.Parent = parent; 
     } 

     //do other stuff with parent 
    } 
} 

public class Parent 
{ 
    public virtual string FamilyName { get; set; } 

    public virtual IList<Child> Children { get; set; } 
} 

public class Child 
{ 
    public virtual string FirstName { get; set; } 

    public virtual Parent Parent { get; set; } 
} 

public class ParentData 
{ 
    public string FamilyName { get; set; } 

    public List<Child> Children { get; set; } 
} 

public class ChildData 
{ 
    public string FirstName { get; set; } 
} 

Répondre

46

Utilisez AfterMap. Quelque chose comme ceci:

Mapper.CreateMap<ParentData, Parent>() 
    .AfterMap((s,d) => { 
     foreach(var c in d.Children) 
      c.Parent = d; 
     }); 
+1

J'espérais éviter d'utiliser une boucle tout à fait mais votre réponse semble être la seule alternative. Quelque chose comme: .ForMember (dest => dest.Parent, opt => opt.MapFrom (src => src)) était ce que je cherchais mais cela ne fonctionne pas. Merci! –

+1

Merci Patrick, ta solution m'a beaucoup aidé :) – Davita

+4

J'espérais aussi quelque chose de différent. Cela devient assez laid si vous avez> 1 liste d'enfants que vous devez traiter. –

Questions connexes