Jest to metoda rozszerzenia, którą napisałem, która ignoruje wszystkie nieistniejące właściwości w miejscu docelowym. Nie jestem pewien, czy nadal będzie przydatny, ponieważ pytanie ma więcej niż dwa lata, ale natknąłem się na ten sam problem, ponieważ musiałem dodać wiele ręcznych połączeń Ignoruj.
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;
}
Stosowanie:
Mapper.CreateMap<SourceType, DestinationType>()
.IgnoreAllNonExisting();
AKTUALIZACJA : Najwyraźniej to nie działa poprawnie, jeśli masz niestandardowe mapowania, ponieważ je zastępują. Myślę, że to może nadal działać, jeśli najpierw wywołasz IgnoreAllNonExisting, a następnie niestandardowe odwzorowania później.
schdr ma rozwiązanie (jako odpowiedź na to pytanie), które wykorzystuje, Mapper.GetAllTypeMaps()
aby dowiedzieć się, które właściwości nie są mapowane i automatycznie je ignorować. Wydaje mi się to bardziej niezawodnym rozwiązaniem.