AutoMapperMappingException Странное поведение - PullRequest
0 голосов
/ 02 ноября 2019

Я обнаружил странное поведение, связанное с AutoMapper, когда я пытаюсь отобразить из этого класса

public class SkinAnalyzerResult {
        public Guid Id { get; set; }
        public ICollection<SkinAnalyzerQuestionAnswer> SelectedAnswers { get; set; }
        public string Description { get; set; }
        public ICollection<Product> RecommendedProducts { get; set; }
}

public class SkinAnalyzerQuestionAnswer {
        public Guid Id { get; set; }
        public String Answer { get; set; }
        public ICollection<SkinAnalyzerResult> Results { get; set; }
        public SkinAnalyzerQuestion Question { get; set; }
}

в этот класс

public class SkinAnalyzerResultDataModel {
        [Key] public Guid Id { get; set; }
        [Required] public ICollection<SkinAnalyzerResultQuestionAnswerDataModel> SelectedAnswers { get; set; }

        public string Description { get; set; }

        public ICollection<SkinAnalyzerResultProductDataModel> RecommendedProducts { get; set; }
        public SkinAnalyzerDataModel SkinAnalyzer { get; set; }
}

public class SkinAnalyzerResultQuestionAnswerDataModel {
        public Guid ResultId { get; set; }
        public SkinAnalyzerResultDataModel Result { get; set; }
        public Guid QuestionAnswerId { get; set; }
        public SkinAnalyzerQuestionAnswerDataModel QuestionAnswer { get; set; }
}

public class SkinAnalyzerQuestionAnswerDataModel {
        [Key] public Guid Id { get; set; }
        [Required] public String Answer { get; set; }
        public SkinAnalyzerQuestionDataModel Question { get; set; }
        public ICollection<SkinAnalyzerResultQuestionAnswerDataModel> Results { get; set; }
}

, используя эту карту конфигурации

cfg.CreateMap<SkinAnalyzerResultDataModel, SkinAnalyzerResult>()
                        .ForMember(dest => dest.SelectedAnswers,
                            opt => opt.MapFrom(
                                src => src.SelectedAnswers.Select(x => x.QuestionAnswer)
                            ))
                        .ForMember(dest => dest.RecommendedProducts,
                            opt => opt.MapFrom(
                                src => src.RecommendedProducts.Select(x => x.Product)
                            ))
                        .ReverseMap();

Когда я попытался сделать это, я получил это AutoMapperMappingException AutoMapperMappingException

, как вы можете видеть, я указал для сопоставления SkinAnalyzerResult.Answers в SkinAnalyzerResultDataModel.SelectedAnswers.QuestionAnswer

есть что-то, что я пропустил или сделал что-то не так?

1 Ответ

0 голосов
/ 04 ноября 2019
cfg.CreateMap<SkinAnalyzerResultDataModel, SkinAnalyzerResult>()
                    .ForMember(dest => dest.SelectedAnswers,
                        opt => opt.MapFrom(
                            src => src.SelectedAnswers.Select(x => x.QuestionAnswer)
                        ))

Тип SelectedAnswers равен ICollection<SkinAnalyzerQuestionAnswer>, а тип QuestionAnswer равен SkinAnalyzerQuestionAnswerDataModel, поэтому вам также необходимо создать сопоставление между двумя моделями:

CreateMap<SkinAnalyzerQuestionAnswerDataModel, SkinAnalyzerQuestionAnswer>()
                    .ForMember( //config if necessary)
...