首页 > 解决方案 > 映射目标类具有更多属性时,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

我的印象是 automapper 只是忽略了目标中存在但源中不存在的属性。这里有什么问题?

标签: c#.netasp.net-core.net-coreautomapper

解决方案


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

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

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

推荐阅读