यह एक मूल प्रश्न हो सकता है लेकिन सोच रहा हूं कि मुझे AutoMapper.Mapper.CreateMap विधि नहीं मिल रही है।
क्या मैं गलत AutoMapper संदर्भ / पैकेज का उपयोग कर रहा हूँ? धन्यवाद
जवाबों:
CreateMap
विधि का स्थिर संस्करण 4.2 में पदावनत किया गया, फिर संस्करण 5.0 में एपीआई से हटा दिया गया। जिमी बोगार्ड ने इस ब्लॉग पोस्ट में इसके बारे में अधिक विस्तार से बात की है ।
मैपिंग की नई तकनीक गैर-स्थैतिक है, इस तरह (कोड पोस्ट से है):
var config = new MapperConfiguration(cfg => {
cfg.CreateMap<Source, Dest>();
});
IMapper mapper = config.CreateMapper();
var source = new Source();
var dest = mapper.Map<Source, Dest>(source);
The type or namespace name 'MapperConfiguration' could not be found (are you missing a using directive or an assembly reference?)
और उसी के लिए IMapper
आप मेरी मदद कर सकते हैं।
यहाँ मैंने अपने कोड में AutoMapper का उपयोग कैसे किया है।
चरण 1: डाउनलोड AutoMapper के माध्यम से nuget-संकुल ।
संस्करण है
<package id="AutoMapper" version="6.1.1" targetFramework="net452" />
चरण 1: डीटीओ वर्ग बनाया गया
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; }
}
चरण 2: एक AutoMapperProfile वर्ग बनाया गया है जो प्रोफ़ाइल से विरासत में मिला है
using AutoMapper;
using ConcertHub.DTOs;
namespace ConcertHub.Models
{
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
CreateMap<Concert, ConcertDTO>();
CreateMap<Notification, NotificationDTO>();
}
}
}
चरण 3: Global.asax फ़ाइल के अनुप्रयोग प्रारंभ विधि में पंजीकृत AutoMapperProfile
protected void Application_Start()
{
AutoMapper.Mapper.Initialize(cfg => cfg.AddProfile<AutoMapperProfile>());
}
अंत में 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;
}
आशा करता हूँ की ये काम करेगा ।
यहाँ है कि यह अब कैसे काम करता है:
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)));
});