AutoMapperMappingException 异常行为

AutoMapperMappingException Strange Behaviour

当我试图从这个 class

映射时,我发现了一些关于 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; }
}

到这个class

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

如您所见,我已指定将 SkinAnalyzerResult.Answers 映射到 SkinAnalyzerResultDataModel.SelectedAnswers.QuestionAnswer

有没有我遗漏或做错了什么?

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)