web-dev-qa-db-fra.com

Automapper: met à jour les valeurs des propriétés sans créer de nouvel objet

Comment utiliser automapper pour mettre à jour les valeurs de propriétés d'un autre objet sans en créer un nouveau?

232
ryudice

Utilisez la surcharge qui prend la destination existante:

Mapper.Map<Source, Destination>(source, destination);

Oui, l'objet de destination est renvoyé, mais ce n'est que pour d'autres scénarios obscurs. C'est le même objet.

398
Jimmy Bogard

Pour que cela fonctionne, vous devez CreateMap pour les types de source et de destination, même s'ils sont du même type. Cela signifie que si vous voulez Mapper.Map<User, User>(user1, user2); vous devez créer une carte comme ceci Mapper.Create<User, User>()

14
Flux Xu

Si vous souhaitez utiliser une méthode d'instance d'IMapper plutôt que la méthode statique utilisée dans la réponse acceptée, vous pouvez effectuer les opérations suivantes (testé dans AutoMapper 6.2.2)

IMapper _mapper;
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Source, Destination>();
});
_mapper = config.CreateMapper();

Source src = new Source
{
//initialize properties
}

Destination dest = new dest
{
//initialize properties
}
_mapper.Map(src, dest);

dest sera maintenant mis à jour avec toutes les valeurs de propriété de src qu'il a partagées. Les valeurs de ses propriétés uniques resteront les mêmes.

Voici le code source pertinent

2
BobbyA