必须解析为顶级成员

时间:2013-02-12 16:38:32

标签: automapper

我尝试了以下地图:

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

Subject.IdSubject都属于int类型。但是,我收到以下错误:

  

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

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

1 个答案:

答案 0 :(得分: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过于复杂,您可能需要重新考虑您的设计。