我一直在寻找,但没有发现这个特殊的问题。我找到了关于将多个类型映射到同一个实体的线程,但不是这个......我不认为这应该是一个问题。
当我第一次将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 :(得分: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();