2016-07-29 79 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

我想这是在映射静态API造成的。它在今年初废弃[从AutoMapper中移除静态API](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(); 
相关问题