এটি একটি প্রাথমিক প্রশ্ন হতে পারে তবে ভাবছি আমি অটোম্যাপার.ম্যাপার.ক্রেইটম্যাপ পদ্ধতিটি পাচ্ছি না।
আমি কি ভুল অটোম্যাপার রেফারেন্স / প্যাকেজটি ব্যবহার করছি? ধন্যবাদ
উত্তর:
CreateMap
পদ্ধতির স্থির সংস্করণটি ৪.২-এ অবচিত করা হয়েছিল, তারপরে সংস্করণ ৫.০-এ এপিআই থেকে সরানো হয়েছে। জিমি বোগার্ড এই ব্লগ পোস্টে আরও বিস্তারিতভাবে এই সম্পর্কে কথা বলেছেন ।
ম্যাপিংয়ের নতুন কৌশলটি অ-স্থিতিশীল, এর মতো (কোডটি পোস্ট থেকে এসেছে):
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
ক্যান দয়া করে আমাকে সাহায্য করুন।
আমি এখানে আমার কোডটিতে অটোম্যাপার ব্যবহার করেছি।
ধাপ 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: প্রোফাইল থেকে উত্তরাধিকার সূত্রে একটি অটোম্যাপারপ্রোফাই ক্লাস তৈরি করা হয়েছে
using AutoMapper;
using ConcertHub.DTOs;
namespace ConcertHub.Models
{
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
CreateMap<Concert, ConcertDTO>();
CreateMap<Notification, NotificationDTO>();
}
}
}
ধাপ 3: নিবন্ধীকৃত AutoMapperProfile মধ্যে অ্যাপ্লিকেশন আরম্ভ পদ্ধতি Global.asax ফাইল
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;
}
আশা করি এটা সাহায্য করবে .
এখন এটি কীভাবে কাজ করে তা এখানে:
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)));
});