2012-02-22 19 views
12

mam dwie klasy jest poniżej mapowanie jest musi być tak id-> Id Imieniny> Tekst imageName -> ImagePath Pages - PageUIsAutomapper z zagnieżdżonej listy podrzędnej

jaki sposób mogę to zrobić używając 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

Bez AutoMapper można napisać: 'nowy ModuleUI {id = module.Id, ImagePath = module.ImageName, PageUIs = new List (module.Pages.Cast ())}; ' – brgerner

Odpowiedz

33

Można użyć ForMember i MapFrom (documentation).
Konfiguracja Mapper mogą być:

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>(); 

Zastosowanie:

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

Wynik:

enter image description here

+1

Doskonały !! Mam rozwiązanie stąd. mój głos +1 – imdadhusen

+0

Tak! AutoMapper zagraża wartościom null i działa też dla mnie! –

Powiązane problemy