J'ai les cours:
public class Person{ /* Props here */ }
public class PersonViewModel { /* Props here */ }
Puis la liste:
List<Person> people = new List<Person>();
List<PersonViewModel> peopleVM = Mapper
.MapList<Person, PersonViewModel>(people); //Problem here.
Quelle est la bonne façon de faire cela?
Mapper.CreateMap<Person, PersonViewModel>();
peopleVM = Mapper.Map<List<Person>, List<PersonViewModel>>(people);
Mapper.AssertConfigurationIsValid();
Depuis le Mise en route
Comment utiliser AutoMapper? Tout d’abord, vous avez besoin d’un type de source et d’un type de destination. La conception du type de destination peut être influencée par la couche dans laquelle il 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é "Prénom", il sera automatiquement associé à un membre de destination portant le nom "Prénom". AutoMapper prend également en charge l’atténuation, qui permet de supprimer toutes les exceptions de références nul 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<Order, OrderDto>();
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, OrderDto>(order);
Une autre solution
List<Person> people = new List<Person>();
List<PersonViewModel> peopelVM;
peopelVM = people.Select(Mapper.Map<Person, PersonViewModel>);
Et dans la config Automapper
Mapper.CreateMap<Person, PersonViewModel>();
Si vous utilisez des listes IQueryable ici (à partir de EF ou de NH par exemple), vous pouvez utiliser les méthodes AutoMapper.IQueryableExtensions, Project () et To ().
C'est la première fois que je travaille avec AutoMapper, mais j'y parviens en créant une carte uniquement pour le modèle:
Mapper.CreateMap<Person, PersonViewModel>();
Mapper.AssertConfigurationIsValid();
Et ensuite, en utilisant les méthodes IQueryableExtension Project () et To ():
using AutoMapper.QueryableExtensions;
...
IQueryable<Person> people = new List<Person>().AsQueryable(); //actually from ORM
IQueryable<PersonViewModel> peopleVM = people.Project().To<PersonViewModel>();
Dans le noyau 1.1, cette extension pourrait fonctionner:
public static List<TDestination> MapList<TSource, TDestination>(this IMapper mapper, List<TSource> source)
{
return source.Select(x => mapper.Map<TDestination>(x)).ToList();
}
Vous pouvez créer une méthode d'extension pour faire quelque chose comme ceci en utilisant des mappages existants pour des éléments individuels:
public static class AutoMapperExtensions
{
public static List<TDestination> MapList<TSource, TDestination>(this IMapper mapper, List<TSource> source)
{
return mapper.Map<List<TDestination>>(source);
}
}
Usage:
List<PersonViewModel> peopleVM = _mapper.MapList<PersonViewModel>(people);
public IActionResault Index(List<User> users)
{
List<VM_User> vM_users=new List<VM_User>();
vM_users=mapper.Map(users,vM_users);
return view(vM_users);
}