J'ai lutté avec celui-ci pendant un certain temps aussi, ou du moins un problème similaire à celui-ci. J'avais une classe avec beaucoup de propriétés (environ 30) et je ne voulais cartographier que 4 d'entre elles. Il semble fou d'ajouter 26 déclarations d'ignorance (surtout quand cela signifie que les futures modifications de la classe impliqueront de les mettre à jour !)
J'ai finalement découvert que je pouvais dire à AutoMapper de tout ignorer, puis d'ajouter explicitement ceux que je voulais.
// Create a map, store a reference to it in a local variable
var map = CreateMap<Source,Target>();
// Ignore all members
map.ForAllMembers(opt => opt.Ignore());
// Add mapping for P1
map.ForMember(dest => dest.P1, opt => opt.MapFrom( src => src.P1));
// Add other mappings...
map.ForMember(dest => dest.P2, opt => opt.MapFrom( src => src.P2));
map.ForMember(dest => dest.P3, opt => opt.MapFrom( src => src.P3));
map.ForMember(dest => dest.P4, opt => opt.MapFrom( src => src.P4));
On pourrait vous pardonner de penser que vous pouvez simplement faire cela (mais ne le faites pas car il ne compilera pas) :
// This won't compile
CreateMap<Source,Target>()
.ForAllMembers(opt => opt.Ignore())
.ForMember(dest => dest.P1, opt => opt.MapFrom( src => src.P1));
La raison pour laquelle cela ne fonctionne pas est que la méthode ForAllMembers() ne supporte pas le style fluide de chaînage (du moins dans la version actuelle 2.0).
La bonne nouvelle est que la version sans chaînage fonctionne effectivement. Le seul problème, bien sûr, est que vous devez indiquer explicitement à AutoMapper les membres à mettre en correspondance. Je n'ai pas encore trouvé de moyen facile de faire les deux, de façon à pouvoir utiliser les mappings implicites et ignorer ceux qui sont cassés.