AutoMapper.Mapper ne contient pas de définition pour CreateMap

Cela pourrait être une question de base, mais je me demande si Je ne reçois pas AutoMapper.Cartographe.Méthode CreateMap.

entrez la description de l'image ici

Est-ce que J'utilise une mauvaise référence/paquet AutoMapper? Merci

58
demandé sur Sami 2016-07-05 04:29:24

3 réponses

La version statique de la méthode CreateMap a été obsolète dans 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 du post):

var config = new MapperConfiguration(cfg => {
    cfg.CreateMap<Source, Dest>();
});

IMapper mapper = config.CreateMapper();
var source = new Source();
var dest = mapper.Map<Source, Dest>(source);
83
répondu Will Ray 2017-06-25 23:05:02

Voici comment J'ai utilisé AutoMapper dans mon code.

Étape 1 : Téléchargé AutoMapper par nuget packages.

La Version est

<package id="AutoMapper" version="6.1.1" targetFramework="net452" />

Étape 1 : Créé 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 classeAutoMapperProfile 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>();
    }
  }
}

Etape 3 : Enregistré AutoMapperProfile dans le Démarrage de l'Application méthode de Mondial.asax fichier

protected void Application_Start()
    {
        AutoMapper.Mapper.Initialize(cfg => cfg.AddProfile<AutoMapperProfile>());

    }

Enfin la magie morceau de code 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 .

25
répondu ksg 2017-07-31 04:35:41

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)));
        });
14
répondu Michael K 2017-02-17 20:35:53