Đây có thể là một câu hỏi cơ bản nhưng tự hỏi tôi không nhận được phương thức AutoMapper.Mapper.CreateMap.
Tôi có đang sử dụng gói / tham chiếu AutoMapper sai không? Cảm ơn
Câu trả lời:
Phiên bản tĩnh của CreateMap
phương pháp này không được dùng nữa trong 4.2, sau đó bị xóa khỏi API trong phiên bản 5.0. Jimmy Bogard nói về điều này chi tiết hơn trong bài đăng trên blog này .
Kỹ thuật mới để ánh xạ là không tĩnh, như thế này (mã lấy từ bài đăng):
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?)
và cũng giống như vậy. IMapper
Bạn có thể vui lòng giúp tôi không.
Đây là cách tôi sử dụng AutoMapper trong mã của mình.
Bước 1: Đã tải xuống AutoMapper thông qua gói nuget .
Phiên bản là
<package id="AutoMapper" version="6.1.1" targetFramework="net452" />
Bước 1: Tạo lớp DTO
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; }
}
Bước 2: Tạo lớp AutoMapperProfile kế thừa từ Hồ sơ
using AutoMapper;
using ConcertHub.DTOs;
namespace ConcertHub.Models
{
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
CreateMap<Concert, ConcertDTO>();
CreateMap<Notification, NotificationDTO>();
}
}
}
Bước 3: Đã đăng ký AutoMapperProfile trong phương thức Bắt đầu ứng dụng của tệp Global.asax
protected void Application_Start()
{
AutoMapper.Mapper.Initialize(cfg => cfg.AddProfile<AutoMapperProfile>());
}
Cuối cùng là đoạn mã kỳ diệu trong Bộ điều khiển 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;
}
Hy vọng nó giúp .
Đây là cách nó hoạt động bây giờ:
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)));
});
Tôi thấy lớp của bạn không kế thừa từ AutoMapper.Profile
Tôi đã làm điều này và làm việc cho tôi
public class AutoMapperConfig: AutoMapper.Profile