3

我尝试了以下地图:

CreateMap<ThemeNewModel, CreateThemeOrder.ThemeModel>()
    .ForMember(d => d.Subject.Id, o => o.MapFrom(s => s.Subject));

Subject.Id和都是Subject类型int。但是,我收到以下错误:

表达式 'd => Convert(d.Subject.Id)' 必须解析为顶级成员,而不是任何子对象的属性。在子类型或 AfterMap 选项上使用自定义解析器。参数名称:lambdaExpression

我正在使用 AutoMapper 2.0。没有我不能解决这个问题AfterMap吗?

4

1 回答 1

3

是什么类型的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 旨在从复杂类型展平为平面模型/视图模型类型,因此您ThemeNewModel的设计过于复杂,也许您需要重新考虑您的设计。

于 2013-02-12T17:26:37.210 回答