2010-12-07 21 views
18

ile bir çocukta bir özellik için üst başvuru atamak için bir hedef nesnede bir öznitelik ana nesnesinin başvurusu ile bir özellik ayarlamak için AutoMapper'ı yapılandırmanın bir yolunu bulmaya çalışıyorum. Aşağıdaki kod, elde etmeye çalıştığım şeyi gösterir. Verileri veri nesnelerine ait & Çocuk örneklerine taşıyorum. Eşleme, doğru veriye sahip Liste koleksiyonu oluşturmak için iyi çalışır ancak ana örnek referansını atamak için bir ForEach'um olması gerekir.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; } 
} 

cevap

46

AfterMap kullanın. Bunun gibi bir şey:

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

Bir döngüyü tamamen kullanmaktan kaçınmayı umuyordum ama cevabınız tek alternatif gibi görünüyor. Şöyle bir şey: .ForMember (dest => dest.Parent, opt => opt.MapFrom (src => src)) aradığım şeydi ama işe yaramıyor. Teşekkürler! –

+1

Teşekkürler Patrick, çözümünüz çok yardımcı oldu :) – Davita

+4

Ben de farklı bir şey umuyordum. Eğer işlemek için ihtiyacınız olan 1 çocuk listeniz varsa bu oldukça çirkin olur. –