2016-07-29 2 views
0

Я искал вокруг, но не нашел эту проблему. Я нашел темы для сопоставления нескольких типов с одним и тем же объектом, но не с этим ... И я не думаю, что это должно быть проблемой.AutoMapper - невозможно сопоставить два типа в одном методе

Когда я впервые сопоставляю EventDto с EventUserViewModel, он работает. Когда я позже на карте EventDto на EventViewModel, он сработает, потому что AutoMapper думает, что я хочу снова отобразить на EvenUserViewModel?

Если я меняю заказ, возникает та же проблема, только обратная.

Предоставление кода здесь; это в основном урезанный пример того, где возникает проблема.

// Mapping an EventDto to a EventUserViewModel 
EventUsersViewModel viewModel = Mapper.Map<EventUsersViewModel>(eventService.GetEventDto(id)); 

// Getting a list of EventDtos 
var myEvents = eventService.GetMyEvents(User.Identity.GetUserId(), User.IsInRole(RoleNames.ADMIN_USER)); 

// Mapping all EventDtos to EventViewModels 
List<EventViewModel> eventViewModelList = myEvents.Select(Mapper.Map<EventViewModel>).ToList(); 

Последняя строка, где она терпит неудачу. AutoMapper пытается сопоставить мои EventDtos с EventUserViewModels вместо EventViewModel, хотя я строго указываю типы.

+0

Я полагаю, это вызвано статическим апи на Mapper. Это было сделано устаревшим в начале года [Удаление статического API из AutoMapper] (https://lostechies.com/jimmybogard/2016/01/21/removing-the-static-api-from-automapper/) –

ответ

0

Решено, создав новый экземпляр AutoMapper. Я уверен, что есть лучший способ сделать это.

Окончательный код:

// Mapping an EventDto to a EventUserViewModel 
EventUsersViewModel viewModel = Mapper.Map<EventUsersViewModel>(eventService.GetEventDto(id)); 

// Getting a list of EventDtos 
var myEvents = eventService.GetMyEvents(User.Identity.GetUserId(), User.IsInRole(RoleNames.ADMIN_USER)); 

// Mapping all EventDtos to EventViewModels 
Mapper mapper = Mapper.Configuration.CreateMapper(); 
List<EventViewModel> eventViewModelList = myEvents.Select(mapper.Map<EventViewModel>).ToList();