2012-02-22 20 views
12

tengo dos clases está por debajo, es mapeo debe ser así ID-> Id Nombre> Texto ImageName -> ImagePath Páginas - PageUIsAutoMapper con lista de elementos secundarios anidados

cómo puedo hacer esto 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

Sin AutoMapper se podría escribir: 'nueva ModuleUI {Id = module.Id, ImagePath = module.ImageName, PageUIs = new List (module.Pages.Cast ())}; ' – brgerner

Respuesta

33

Puede utilizar ForMember y MapFrom (documentation).
Su configuración Mapper podría ser:

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

Uso:

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

Resultado:

enter image description here

+1

Excelente !! Tengo una solución desde aquí. mi voto +1 – imdadhusen

+0

¡Sí! ¡AutoMapper amenaza valores nulos y también funciona para mí! –

Cuestiones relacionadas