在ForAllMembers方法中访问源对象

时间:2012-04-04 11:32:14

标签: c# automapper

尝试根据viewModel上的特定字段跳过属性映射。有没有办法在ForAllMembers中访问源对象 - >条件方法

Mapper.CreateMap<AViewModel, AEntity>()
      .IgnoreMembers(ignoreMembers)
      .ForAllMembers(o => {
          o.Condition(ctx => {
                        //Need to access AViewModel instance here
                return "Id" == ctx.MemberName;
    });
   });

2 个答案:

答案 0 :(得分:1)

我不知道官方方式,但您可以使用Parent上的ResolutionContext属性

Mapper.CreateMap<AViewModel, AEntity>()
      .IgnoreMembers(ignoreMembers)
      .ForAllMembers(o => {
          o.Condition(ctx => {
                AViewModel instance = (AViewModel)ctx.Parent.SourceValue;
                return "Id" == ctx.MemberName;
    });
   });

如果您在映射的多个级别中,您可以“遍历”Parent关系,直到找到您要查找的类型。

答案 1 :(得分:0)

我认为您可以使用自定义ValueResolver以另一种方式执行此操作。

请参阅:

Conditional projection using AutoMapper