2017-07-25 84 views
0
public IEnumerable<NotificationDto> GetNewNotifications() 
{ 
    var userId = User.Identity.GetUserId(); 
    var notifications = _context.UserNotifications 
     .Where(un => un.UserId == userId) 
     .Select(un => un.Notification) 
     .Include(n => n.Gig.Artist) 
     .ToList(); 

    Mapper.CreateMap<ApplicationUser, UserDto>(); 
    Mapper.CreateMap<Gig, GigDto>(); 
    Mapper.CreateMap<Notification, NotificationDto>(); 

    return notifications.Select(Mapper.Map<Notification, NotificationDto>); 
} 

能否請你幫我確定正確此CreateMap,並解釋爲什麼它定義這種方式後,顯示此消息?爲什麼找不到這個方法映射器不包含定義CreateMap

+1

請參閱本又壞了同樣的錯誤AutoMapper https://github.com/AutoMapper/AutoMapper/wiki/5.0-Upgrade-Guide – Ben

回答

1

正如本所指出的,使用靜態映射器來創建地圖在5版本已經過時。在任何情況下,代碼示例,你有演出將有不好的表現,因爲你會重新對每個請求的地圖。

取而代之,將映射配置放入AutoMapper.Profile,並在應用程序啓動時初始化映射器一次

using AutoMapper; 

// reuse configurations by putting them into a profile 
public class MyMappingProfile : Profile { 
    public MyMappingProfile() { 
     CreateMap<ApplicationUser, UserDto>(); 
     CreateMap<Gig, GigDto>(); 
     CreateMap<Notification, NotificationDto>(); 
    } 
} 

// initialize Mapper only once on application/service start! 
Mapper.Initialize(cfg => { 
    cfg.AddProfile<MyMappingProfile>(); 
}); 

AutoMapper Configuration

+0

的升級細節。 – Sarah

+1

不好意思啊,它應該是'CreateMap ();',而不是'Mapper.CreateMap ();'在配置文件中。我編輯了答案 –

相關問題