我正在使用最新的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
给我的印象是,自动映射器只会忽略目标中存在的属性,而不是源中存在的属性。 这是什么问题?
答案 0 :(得分:4)
您可以为MemberList
方法指定一个CreateMap
枚举值,该方法配置是验证源,目标,还是在映射后不验证类型的任何属性。在您的情况下,您应该从MemberList.Source
到RateDto
类型指定ConverionRate
,以便仅在 source 类型(RateDto
)上映射属性。经过验证。从ConversionRate
到RateDto
的映射应使用MemberList.Destination
来确保RateDto
中的所有属性都从ConversionRate
映射。 MemberList.Destination
是默认值,因此您不必在映射配置文件中明确指定它。
您可以像这样在映射配置文件中配置配置验证:
public ConversionRateProfile()
{
CreateMap<ConversionRate, RateDto>();
CreateMap<RateDto, ConversionRate>(MemberList.Source);
}