2016-08-02 4 views
1

AutoMapper v4.0 war sehr geradlinig innerhalb einer Methode zu verwenden, kann jemand helfen, diese neu zu schreiben für v5.0 bitte (speziell der Mapper-Code):Rewrite-Code für AutoMapper v5.0 auf v4.0

public IEnumerable<NotificationDto> GetNewNotifications() 
    { 
     var userId = User.Identity.GetUserId(); 
     var notifications = _context.UserNotifications 
      .Where(un => un.UserId == userId && !un.IsRead) 
      .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>); 
    } 

UPDATE: Es scheint, dass EF-Core nicht, was herausragt AutoMapper ist Mapping mit:

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

Aber ich Ergebnisse in Postman mit dem folgenden Code erhalten:

 return notifications.Select(n => new NotificationDto() 
     { 
      DateTime = n.DateTime, 
      Gig = new GigDto() 
      { 
       Artist = new UserDto() 
       { 
        Id = n.Gig.Artist.Id, 
        Name = n.Gig.Artist.Name 

       }, 
       DateTime = n.Gig.DateTime, 
       Id = n.Gig.Id, 
       IsCancelled = n.Gig.IsCancelled, 
       Venue = n.Gig.Venue 
      }, 
      OriginalVenue = n.OriginalVenue, 
      OriginalDateTime = n.OriginalDateTime, 
      Type = n.Type 
     }); 

Antwort

0

Wenn Sie möchten, verwenden statische Instanz halten - die einzige Änderung ist in Mapper Initialisierung:

Mapper.Initialize(cfg => 
{ 
    cfg.CreateMap<ApplicationUser, UserDto>(); 
    cfg.CreateMap<Gig, GigDto>(); 
    cfg.CreateMap<Notification, NotificationDto>(); 
}); 

auch Sie diesen Code nur einmal pro AppDomain (irgendwo beim Start zum Beispiel) und nicht jedes Mal ausgeführt werden soll Sie rufen GetNewNotifications.

+0

Die Mapper.map-Zeile scheint nicht zu funktionieren. Sieht so aus, als müsste das auch neu geschrieben werden – Reza

+0

Haben Sie einen Fehler? funktioniert gut für mich –

+0

Intellisense beschweren sich über diese Linie zurück Benachrichtigungen.Wählen (Mapper.Map ); – Reza