当映射目标类具有更多属性时,Automapper失败

时间:2019-05-16 06:46:53

标签: c# .net asp.net-core .net-core automapper

我正在使用最新的AutoMapper.Extensions.Microsoft.DependencyInjection 6.1.0。 我有两节课

public class ConversionRate
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public long Id { get; set; }

        [Required]
        public string FromCurrency { get; set; }

        [Required]
        public string ToCurrency { get; set; }

        [Required]
        [Range(0, 100000)]
        public double Value { get; set; }

        [Required]
        public DateTime Date { get; set; }

        [ForeignKey("ProviderId")]
        public Provider Provider { get; set; }
        public int ProviderId { get; set; }
    }

public class RateDto
    {
        public DateTime Date { get; set; }
        public double Value { get; set; }
    }

这是自动映射器配置文件

public class ConversionRateProfile : Profile
    {
        public ConversionRateProfile()
        {
            CreateMap<ConversionRate, RateDto>();
            CreateMap<RateDto, ConversionRate>();

        }
    }

我收到一个错误,指出有未映射的属性

Unmapped properties:
Id
FromCurrency
ToCurrency
Provider
ProviderId

给我的印象是,自动映射器只会忽略目标中存在的属性,而不是源中存在的属性。 这是什么问题?

1 个答案:

答案 0 :(得分:4)

您可以为MemberList方法指定一个CreateMap枚举值,该方法配置是验证源,目标,还是在映射后不验证类型的任何属性。在您的情况下,您应该从MemberList.SourceRateDto类型指定ConverionRate,以便仅在 source 类型(RateDto)上映射属性。经过验证。从ConversionRateRateDto的映射应使用MemberList.Destination来确保RateDto中的所有属性都从ConversionRate映射。 MemberList.Destination是默认值,因此您不必在映射配置文件中明确指定它。

您可以像这样在映射配置文件中配置配置验证:

public ConversionRateProfile()
{
    CreateMap<ConversionRate, RateDto>();
    CreateMap<RateDto, ConversionRate>(MemberList.Source);
}