我尝试了以下 map :
CreateMap<ThemeNewModel, CreateThemeOrder.ThemeModel>()
.ForMember(d => d.Subject.Id, o => o.MapFrom(s => s.Subject));
Subject.Id
和Subject
都是int
类型。但是,我收到以下错误:
Expression 'd => Convert(d.Subject.Id)' must resolve to top-level member and not any child object's properties. Use a custom resolver on the child type or the AfterMap option instead.Parameter name: lambdaExpression
我正在使用 AutoMapper 2.0。如果没有 AfterMap
,我不能解决这个问题吗?
最佳答案
ThemeNewModel.Subject
的类型是什么?假设它是 ThemeSubject
,您可能会成功地执行以下操作:
CreateMap<ThemeSubject, CreateThemeOrder.ThemeModel>()
.ForMember(d=>d.Id, o => o.MapFrom(s->s.Subject));
CreateMap<ThemeNewModel, CreateThemeOrder.ThemeModel>()
.ForMember(d=>d.Subject, o => o.MapFrom(s => s);
如果上述方法不起作用,您应该遵循异常中的建议,并创建一个自定义解析器。
无论如何,automapper 旨在将复杂类型扁平化为扁平模型/ View 模型类型,因此您的 ThemeNewModel
太复杂了,也许您需要重新考虑您的设计。
关于automapper - 必须解析为顶级成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14837338/