C'est peut-être une question de base, mais je me demande si je ne reçois pas la méthode AutoMapper.Mapper.CreateMap.
Est-ce que j'utilise une mauvaise référence/package AutoMapper? Merci
La version statique de la méthode CreateMap
était obsolète en 4.2, puis supprimée de l'API dans la version 5.0. Jimmy Bogard en parle plus en détail dans cet article de blog .
La nouvelle technique de mappage est non statique, comme ceci (le code provient de la publication):
var config = new MapperConfiguration(cfg => {
cfg.CreateMap<Source, Dest>();
});
IMapper mapper = config.CreateMapper();
var source = new Source();
var dest = mapper.Map<Source, Dest>(source);
Voici comment j'ai utilisé AutoMapper dans mon code.
Étape 1: Téléchargé AutoMapper à travers nuget-packages.
La version est
<package id="AutoMapper" version="6.1.1" targetFramework="net452" />
Étape 1: Création DTO classe
public class NotificationDTO
{
public DateTime DateTime { get; private set; }
public NotificationType Type { get; private set; }
public DateTime? OriginalDateTime { get; private set; }
public string OriginalVenue { get; private set; }
public ConcertDTO Concert { get; set; }
}
public class ConcertDTO
{
public int Id { get; set; }
public bool IsCancelled { get; private set; }
public DateTime DateTime { get; set; }
public string Venue { get; set; }
}
Étape 2: Création d'une classe AutoMapperProfile qui hérite de Profile
using AutoMapper;
using ConcertHub.DTOs;
namespace ConcertHub.Models
{
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
CreateMap<Concert, ConcertDTO>();
CreateMap<Notification, NotificationDTO>();
}
}
}
Étape 3: inscrit AutoMapperProfile dans le fichier démarrage de l'application de Global.asax
protected void Application_Start()
{
AutoMapper.Mapper.Initialize(cfg => cfg.AddProfile<AutoMapperProfile>());
}
Enfin, le morceau de code magique dans le contrôleur Api
public IEnumerable<NotificationDTO> GetNewNotification()
{
var userId = User.Identity.GetUserId();
var notifications = _dbContext.UserNotifications
.Where(un => un.UserId == userId && !un.IsRead)
.Select(un => un.Notification)
.Include(n => n.Concert)
.ProjectTo<NotificationDTO>()//use Automapper.QueryableExtension namespace
.ToList();
return notifications;
}
J'espère que ça aide .
Voici comment cela fonctionne maintenant:
Mapper.Initialize(cfg =>
{
cfg.CreateMap<SupervisorEmployee, SupervisorViewModel>()
.ForMember
(dst => dst.Name, src => src.MapFrom<string>(e => SupervisorViewModel.MapName(e)))
.ForMember
(dst => dst.OfficePhone, src => src.MapFrom<string>(e => e.OfficePhone.FormatPhone(e.OfficePhoneIsForeign)))
.ForMember
(dst => dst.HomePhone, src => src.MapFrom<string>(e => e.HomePhone.FormatPhone(e.HomePhoneIsForeign)))
.ForMember
(dst => dst.MobilePhone, src => src.MapFrom<string>(e => e.MobilePhone.FormatPhone(e.MobilePhoneIsForeign)));
});