ПРИМЕЧАНИЕ. В этом сценарии используются две модели структуры сущностей для синхронизации данных между двумя базами данных, но я думаю, что это применимо к другим сценариям. Можно попытаться решить эту проблему и на стороне EF (как в этот вопрос SO ), но я хотел посмотреть, сможет ли AutoMapper справиться с этим из коробки
Я пытаюсь выяснить, может ли AutoMapper (легко :) сравнивать значения source и dest (при использовании его для синхронизации с существующим объектом) и выполнять копирование, только если значения различаются (по умолчанию равно Equals) , потенциально передавая в Func, например, если я решил сделать String.Equals с StringComparison.OrdinalIgnoreCase для некоторой конкретной пары значений). По крайней мере, для моего сценария, я в порядке, если он ограничен только случаем TSource == TDest (я буду синхронизироваться с int, string и т. Д., Поэтому я не думаю, что мне понадобятся какие-либо преобразователи типов)
Просматривая примеры и тесты, кажется, что наиболее близким является условное отображение (src \ UnitTests \ ConditionalMapping.cs), и я бы использовал перегрузку Condition, которая принимает Func (поскольку другой перегрузки недостаточно, так как нам тоже нужна информация о десте). Это, конечно, выглядит на первый взгляд так, как будто оно будет работать нормально (я еще не использовал его), но в итоге я бы определил это для каждого члена (хотя, полагаю, я мог бы определить небольшое количество действий / методов и по крайней мере, повторно используйте их вместо N разных лямбд).
Это самый простой доступный маршрут (кроме изменения AutoMapper) для получения «единственной копии, если значения source и dest отличаются» или есть другой способ, которого я не вижу? Если является простейшим маршрутом, было ли это уже сделано ранее? Такое ощущение, что я, вероятно, изобретаю колесо здесь. :)