Dies ist eine Erweiterungsmethode, die ich geschrieben habe und die alle nicht vorhandenen Eigenschaften des Ziels ignoriert. Ich bin mir nicht sicher, ob es noch nützlich sein wird, da die Frage älter als zwei Jahre ist, aber ich bin auf dasselbe Problem gestoßen, das viele manuelle Ignorieraufrufe hinzufügen musste.
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;
}
Verwendung:
Mapper.CreateMap<SourceType, DestinationType>()
.IgnoreAllNonExisting();
UPDATE : Anscheinend funktioniert dies nicht richtig, wenn Sie benutzerdefinierte Zuordnungen haben, da diese überschrieben werden. Ich denke, es könnte immer noch funktionieren, wenn Sie zuerst IgnoreAllNonExisting und später die benutzerdefinierten Zuordnungen aufrufen.
schdr hat eine Lösung (als Antwort auf diese Frage), mit Mapper.GetAllTypeMaps()
der herausgefunden wird, welche Eigenschaften nicht zugeordnet sind, und diese automatisch ignoriert wird. Scheint mir eine robustere Lösung zu sein.