AutoMapper - 无法在同一方法中映射两种类型

时间:2016-07-29 10:39:39

标签: asp.net-mvc automapper dto

我一直在寻找,但没有发现这个特殊的问题。我找到了关于将多个类型映射到同一个实体的线程,但不是这个......我不认为这应该是一个问题。

当我第一次将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,即使我严格指定了类型。

1 个答案:

答案 0 :(得分: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();