Це метод розширення, про який я писав, який ігнорує всі неіснуючі властивості пункту призначення. Не впевнений, чи все-таки це буде корисно, оскільки запитання вже більше двох років, але я зіткнувся з тим самим питанням, маючи додати багато ручних Ігнорувати дзвінки.
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;
}
Використання:
Mapper.CreateMap<SourceType, DestinationType>()
.IgnoreAllNonExisting();
ОНОВЛЕННЯ : Мабуть, це не працює правильно, якщо у вас є власні відображення, оскільки вони перезаписують їх. Я думаю, це все ще може спрацювати, якщо спочатку зателефонувати в IgnoreAllNonExisting, а потім у користувацькі відображення.
schdr має рішення (як відповідь на це запитання), яке використовує Mapper.GetAllTypeMaps()
для з'ясування, які властивості не мають карти та автоматично їх ігнорує. Мені здається, більш надійне рішення.