Я использую;
AutoMapper.Extensions.Microsoft.DependencyInjection 6.0.0
в проекте web api trunning net core 2.2
при отображении объекта DTO я использую Automapper для отображения нескольких полей;
public class AutoMapperProfile : AutoMapper.Profile
{
public AutoMapperProfile()
{
CreateMap<ReviewPostInputModel, Review>()
.ForMember(x => x.ReceiveThirdPartyUpdates, opt => opt.MapFrom(src => src.ReceiveThirdPartyUpdates ? (DateTime?)DateTime.UtcNow : null))
.ForMember(x => x.ReceiveUpdates, opt => opt.MapFrom(src => src.ReceiveUpdates ? (DateTime?)DateTime.UtcNow : null))
.ForMember(x => x.AverageScore, opt => opt.MapFrom(src => (decimal)Math.Round((src.Courtsey + src.Reliability + src.Tidiness + src.Workmanship) / 4, 2)));
// ...
}
}
Где;
using System;
using System.Collections.Generic;
using System.Text;
public class Review
{
// ...
public decimal Reliability { get; set; }
public decimal Tidiness { get; set; }
public decimal Courtsey { get; set; }
public decimal Workmanship { get; set; }
public decimal AverageScore { get; set; }
public DateTime? ReceiveUpdates { get; set; }
public DateTime? ReceiveThirdPartyUpdates { get; set; }
}
Однако, когда я пытаюсь отобразить с помощью;
var review = _mapper.Map<Review>(model);
Все стандартные члены отображаются в строке ForMember
, указанной выше, где DateTimes установлен на новый экземпляр DateTime
, а Averagescore установлен на 0.
Для полноты я добавлю преобразователь в мой контроллер следующим образом:
private readonly IMapper _mapper;
public ReviewController( IMapper mapper)
{
_mapper = mapper;
}
Я настраиваю Automapper в моем StartUp.cs
следующим образом;
services.AddAutoMapper();
Я также попытался добавить тест в контроллер, чтобы подтвердить, что значения со входа не являются проблемой (выполнено после карты и может подтвердить, что это значение правильно обновлено);
review.AverageScore = (decimal)Math.Round((model.Courtsey + model.Reliability + model.Tidiness + model.Workmanship) / 4, 2);
У кого-нибудь есть идеи, почему это происходит?