2016-04-12 1 views
5

Я использую AutoMapper с профилями, и он работает очень хорошо. Недавно я нашел конфигурацию CreateMissingTypeMaps и, если она работает, как я понимаю, сделает мою разработку быстрее, один раз, когда не потребуется создавать простые сопоставления.AutoMapper с CreateMissingTypeMaps и AddProfile

Я добавил в свою конфигурацию профиль с AddProfile и после этого создал конфигурацию CreateMissingTypeMaps.

Ex:

------- Создание конфигурации ------------

var config = new MapperConfiguration(cfg => 
{ 
    cfg.AddProfile<PersonServiceMapperProfile>(); 
    cfg.CreateMissingTypeMaps = true; 
}); 

------- Внутри моего PersonServiceMapperProfile - ----

internal class PersonServiceMapperProfile : Profile 
{ 
    protected override void Configure() 
    { 
     CreateMap<PersonData, ProfileViewModel>().ConvertUsing<PersonDataToProfileViewModel>(); 
    } 
} 

Когда для конфигурации CreateMissingTypeMaps установлено значение true, профиль больше не работает. Мое пользовательское сопоставление не вызывается.

Как решить этот вопрос?

+0

Это все еще происходит? – Brad

+1

@Brad Я только что обновился с v3.3 до v6, и это происходит со мной. Я пытаюсь понять, как мне избежать использования DynamicMap во многих местах, которые мне не нужно беспокоиться с CreateMap (у меня было бы буквально 100 пустых вызовов CreateMap). Я отправлю обратно сюда, когда выясню это ... – pbarranis

ответ

0

Я столкнулся с этим же вопросом после обновления AutoMapper 3 до 6 недавно, и я нашел выпуск в GitHub для AutoMapper, определившего решения этой проблемы:

AddConditionalObjectMapper() является способом пойдите так, чтобы ваши типы анонов были сопоставлены, но не переписывали ваши сопоставления по умолчанию. Не используйте это с CreateMissingtypeMaps, потому что это перезаписывает условие. CreateMissingTypeMaps - это AddConditionalObjectMapper(). Где ((s, d) => true);

Source: Issue 2008, TylerCarlson1

Однако это не следует использовать для "простых отображений". Функция CreateMissingTypeMaps предназначена только для использования, когда сопоставления неизвестны до момента компиляции, например, с помощью EF Dynamic Proxies. Причина, по которой он не должен использоваться для известных типов, заключается в том, что функции CreateMap и компиляции позволяют быстро протестировать и предотвратить неудачные сопоставления из-за опечаток, несоответствующих имен, новых или удаленных свойств и т. Д. Это очень важно использовать как и предполагалось, поэтому максимально используйте его.

Смежные вопросы