2012-02-22 12 views
12

Ho due di classe è inferiore, mappatura è deve essere come questo Id-> Id Name-> Testo ImageName -> ImagePath pagine - PageUIsAutomapper con la lista figlio nidificato

come posso fare questo usando Automapper?

public class Module 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public string ImageName { get; set; } 
     public virtual ICollection<Page> Pages { get; set; } 
    } 

    public class ModuleUI 
    { 

     public int Id { get; set; } 
     public string Text { get; set; } 
     public string ImagePath { get; set; } 
     public List<PageUI> PageUIs{ get; set; } 
    } 
+1

Senza automapper si potrebbe scrivere: 'nuova ModuleUI {Id = module.Id, ImagePath = module.ImageName, PageUIs = new List (module.Pages.Cast ())}; ' – brgerner

risposta

33

È possibile utilizzare ForMember e MapFrom (documentation).
La configurazione Mapper potrebbe essere:

Mapper.CreateMap<Module, ModuleUI>() 
    .ForMember(s => s.Text, c => c.MapFrom(m => m.Name)) 
    .ForMember(s => s.ImagePath, c => c.MapFrom(m => m.ImageName)) 
    .ForMember(s => s.PageUIs, c => c.MapFrom(m => m.Pages)); 
Mapper.CreateMap<Page, PageUI>(); 

Usage:

var dest = Mapper.Map<ModuleUI>(new Module 
            { 
             Name = "sds", 
             Id = 2, 
             ImageName = "sds", 
             Pages = new List<Page> 
                { 
                 new Page(), 
                 new Page() 
                } 
            }); 

Risultato:

enter image description here

+1

Eccellente !! Ho una soluzione da qui. il mio voto +1 – imdadhusen

+0

Sì! AutoMapper minaccia valori nulli e funziona anche per me! –

Problemi correlati