C'est une extension de la méthode que j'ai écrit qui ignore tous les non-existence de propriétés de la destination. Vous ne savez pas si il sera encore utile que la question est plus de deux ans, mais je suis tombé sur le même problème d'avoir à ajouter beaucoup de manuel d'Ignorer les appels.
public static IMappingExpression<TSource, TDestination> IgnoreAllNonExisting<TSource, TDestination>
(this IMappingExpression<TSource, TDestination> expression)
{
var flags = BindingFlags.Public | BindingFlags.Instance;
var sourceType = typeof (TSource);
var destinationProperties = typeof (TDestination).GetProperties(flags);
foreach (var property in destinationProperties)
{
if (sourceType.GetProperty(property.Name, flags) == null)
{
expression.ForMember(property.Name, opt => opt.Ignore());
}
}
return expression;
}
Utilisation:
Mapper.CreateMap<SourceType, DestinationType>()
.IgnoreAllNonExisting();
Mise à JOUR: Apparemment, cela ne fonctionne pas correctement si vous avez personnalisé les mappages parce qu'il remplace. Je suppose que cela pourrait encore fonctionner si l'appel IgnoreAllNonExisting d'abord, puis les mappages personnalisés plus tard.
schdr a une solution (comme une réponse à cette question) qui utilise Mapper.GetAllTypeMaps()
pour trouver les propriétés qui sont déchargés de la mémoire et de l'auto de les ignorer. Semble être une solution plus robuste pour moi.