net mvc inicializar asp.net-mvc asp.net-web-api automapper

asp.net-mvc - mvc - automapper web api



AutoMapper.Mapper no contiene definiciĆ³n para CreateMap (3)

Así es como funciona ahora:

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))); });

Esta podría ser una pregunta básica, pero me pregunto si no estoy obteniendo el método AutoMapper.Mapper.CreateMap.

¿Estoy usando una referencia / paquete de AutoMapper incorrecto? Gracias


Así es como usé AutoMapper en mi código.

Paso 1: Descargado AutoMapper a través de nuget-packages .

La versión es

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

Paso 1: clase DTO creada

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; } }

Paso 2: creó una clase AutoMapperProfile que hereda de Profile

using AutoMapper; using ConcertHub.DTOs; namespace ConcertHub.Models { public class AutoMapperProfile : Profile { public AutoMapperProfile() { CreateMap<Concert, ConcertDTO>(); CreateMap<Notification, NotificationDTO>(); } } }

Paso 3: AutoMapperProfile registrado en el método de Inicio de la aplicación del archivo Global.asax

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

Finalmente el código mágico en el controlador 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; }

Espero eso ayude .


La versión estática del método CreateMap quedó en desuso en 4.2, luego se eliminó de la API en la versión 5.0. Jimmy Bogard habla sobre esto con más detalle en esta publicación de blog .

La nueva técnica para el mapeo es no estática, como esta (el código es de la publicación):

var config = new MapperConfiguration(cfg => { cfg.CreateMap<Source, Dest>(); }); IMapper mapper = config.CreateMapper(); var source = new Source(); var dest = mapper.Map<Source, Dest>(source);