2010-11-25 3 views
38

Je le défintion Automapper suivant:Automapper - Mappe-t-il les listes d'objets?

Mapper.CreateMap<IB.BusinessComponents.Data.LocationMaster, IB.Entites.Master.Location>(); 
Mapper.CreateMap<IB.BusinessComponents.Data.LocationMaster, IB.Entites.Master.Location>() 
    .ForMember(destination => destination.Id, source => source.MapFrom(item => item.LocationMasterID)) 
    .ForMember(destination => destination.ChildLocationList, source => source.Ignore()); 

Cela fonctionne bien quand je mapper un seul objet. Mais je n'arrive pas à passer dans les listes d'objets. Ai-je besoin d'une définition différente lors de la transmission d'une liste ou n'est-ce pas possible?

+0

Pourquoi avez-vous le même mappage deux fois ? Vous devriez seulement le définir une fois (vraisemblablement le second) – BeRecursive

+5

@BeRecursive - Probablement parce que j'ai un total de 2 heures d'expérience avec cet outil. –

+0

Eh bien, je devrais travailler avec des listes hors de la boîte tant que vous définissez le mappage correctement. Voulez-vous dire des listes du type ci-dessus? Vous n'avez pas besoin de définir des mappages pour les listes d'objets explicites, il vous suffit de définir les mappages pour le type d'objet que vous souhaitez mapper et les listes devraient simplement fonctionner. – BeRecursive

Répondre

111

Dans votre AutoMapper Définition:

CreateMap<MyStuffDTO, MyStuffViewModel>() 
     .ForMember(dto => dto.MyDate, opt => opt.MapFrom(src => src.LastDate)) 
     .ForMember(dto => dto.MyTime, opt => opt.MapFrom(src => src.LastTime)) 
     .ForMember(dto => dto.Category, opt => opt.MapFrom(src => src.Category)); 

Dans le code:

Single:

var result = Mapper.Map<MyStuffDTO, MyStuffViewModel>(obj); 

pour la liste:

var list = Mapper.Map<IList<MyStuffDTO>, IList<MyStuffViewModel>>(obj); 
+0

A travaillé parfaitement - merci! –

+2

+10 si possible, a travaillé comme un charme. – IamStalker

+0

[AutoMap (typeof (Liste ), typeof (Liste ))] puis-je l'utiliser comme ceci dans MVC ??? – dnxit