AutoMapperMappingException奇怪的行为

时间:2019-11-02 19:45:28

标签: c# asp.net-core .net-core automapper

当我尝试从此类映射时,我发现了一些有关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 :(得分:0)

SelectedAnswers

ICollection<SkinAnalyzerQuestionAnswer>的类型为QuestionAnswer,而SkinAnalyzerQuestionAnswerDataModel的类型为CreateMap<SkinAnalyzerQuestionAnswerDataModel, SkinAnalyzerQuestionAnswer>() .ForMember( //config if necessary) ,因此您还需要在两个模型之间创建映射:

app/build.gradle: