2016-07-05 17 views
43

için tanım içermiyor Bu basit bir soru ama AutoMapper.Mapper.CreateMap yöntemini alamıyorum merak ediyorum.AutoMapper.Mapper, CreateMap

enter image description here

Am yanlış AutoMapper referans/paket programı kullanılarak?

cevap

62

CreateMap yönteminin statik sürümü 4.2'de kullanımdan kaldırıldı, ardından sürüm 5.0'da API'den kaldırıldı. Jimmy Bogard bunu this blog post numaralı telefondan daha ayrıntılı olarak anlatıyor. İşte

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

IMapper mapper = config.CreateMapper(); 
var source = new Source(); 
var dest = mapper.Map<Source, Dest>(source); 
+0

Teşekkürler, .ForMember() yönteminin nasıl kullanılacağını önerip kullanamayacağımı merak ediyorum. – Sami

+4

Aşağıdaki yolu buldum: diğerleri için yararlı olabilir var configStack = new MapperConfiguration ( cfg => {cfg.CreateMap (). ForMember (dest => dest.stackId, opts => opts.MapFrom (src => src.itemId));} ); – Sami

+0

Aynı sorunu yaşadım, önerdiğim gibi denedim ama bana bir hata veriyor 'Tür veya ad alanı adı 'MapperConfiguration' bulunamadı (bir yönerge veya bir montaj başvurusu kullanarak eksik misiniz?)' Ve aynı zamanda IMapper 'Bana yardım edebilir misiniz? –

13

artık işliyor:

haritalama için yeni bir teknik bu (kod görevinden ise) gibi statik olmayan bir

İşte
 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))); 
     }); 
17

kullandım nasıl Kodumda AutoMapper.

Aşama 1: Nuget-paketleri boyunca AutoMapper indirilmiştir.

Version

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

Adım 1: oluşturuldu DTO sınıfı

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

} 

Adım 2: Profil devralan bir AutoMapperProfile sınıf oluşturuldu

using AutoMapper; 
using ConcertHub.DTOs; 

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

Adım 3: ait Uygulama Başlatma yöntemle Global.asax Son olarak dosya

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

    } 

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

onu Umut Api Kontrolörü kod sihirli parça halinde AutoMapperProfile Kayıtlı yardım eder .

+0

Harika ve net bir açıklama, teşekkürler. –

+0

Anlaması daha kolay. Teşekkürler. – Najeeb

+1

Bu Plughsight :-) – Casperonian