Automapper завершается ошибкой, когда отображение целевого класса имеет больше свойств - PullRequest
0 голосов
/ 16 мая 2019

Я использую последнюю версию 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 просто игнорирует свойства, которые существуют в месте назначения, но не в источнике. В чем здесь проблема?

1 Ответ

4 голосов
/ 16 мая 2019

Вы можете указать значение перечисления 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);
}
...