Listes de mappage utilisant Automapper

J’ai les cours:

public class Person{ /* Props here */ } public class PersonViewModel { /* Props here */ } 

Puis la liste:

 List people = new List(); List peopleVM = Mapper .MapList(people); //Problem here. 

Quelle est la bonne façon de faire cela?

 Mapper.CreateMap(); peopleVM = Mapper.Map, List>(people); Mapper.AssertConfigurationIsValid(); 

De la mise en route

Comment utiliser AutoMapper? Tout d’abord, vous devez utiliser à la fois un type de source et un type de destination. La conception du type de destination peut être influencée par la couche dans laquelle elle réside, mais AutoMapper fonctionne mieux tant que les noms des membres correspondent aux membres du type source. Si vous avez un membre source appelé “FirstName”, celui-ci sera automatiquement mappé sur un membre de destination nommé “FirstName”. AutoMapper prend également en charge l’aplatissement, qui peut éliminer toutes les exceptions nulles de référence que vous pourriez rencontrer en cours de route.

Une fois que vous avez vos types et une référence à AutoMapper, vous pouvez créer une carte pour les deux types.

 Mapper.CreateMap(); 

Le type à gauche est le type de source et le type à droite est le type de destination. Pour effectuer un mappage, utilisez la méthode Map.

 OrderDto dto = Mapper.Map(order); 

Une autre solution

 List people = new List(); List peopelVM; peopelVM = people.Select(Mapper.Map); 

Et dans la config Automer

 Mapper.CreateMap(); 

Si vous utilisez les listes IQueryable ici (à partir de EF ou NH, par exemple), vous pouvez utiliser les méthodes AutoMapper.IQueryableExtensions, Project () et To ().

Ceci est ma première fois avec AutoMapper, mais je réussis en créant une carte pour le modèle:

 Mapper.CreateMap(); Mapper.AssertConfigurationIsValid(); 

Et puis en utilisant les méthodes IQueryableExtension Project () et To ():

 using AutoMapper.QueryableExtensions; ... IQueryable people = new List().AsQueryable(); //actually from ORM IQueryable peopleVM = people.Project().To(); 

Dans Core 1.1, cette extension pourrait fonctionner:

 public static List MapList(this IMapper mapper, List source) { return source.Select(x => mapper.Map(x)).ToList(); } 

Vous pouvez créer une méthode d’extension pour faire quelque chose comme cela en utilisant les mappages existants pour des éléments individuels:

 public static class AutoMapperExtensions { public static List MapList(this IMapper mapper, List source) { return mapper.Map>(source); } } 

Usage:

 List peopleVM = _mapper.MapList(people);