AutoMapper:ForMember和ForSourceMember有什么区别?

时间:2015-11-11 21:46:17

标签: automapper

我是AutoMapper的新手,所以这可能是一个初学者的问题。我已经搜索过,但还没有看到这个问题。创建地图时,ForMember和ForSourceMember方法之间的区别是什么:

            Mapper.CreateMap<Role, RoleDto>()
            .ForMember(x => x.Users, opt => opt.Ignore())
            .ForSourceMember(x => x.Users, opt => opt.Ignore());

我维护其他人编写的代码。在某些地方,我看到ForMember,在其他ForSourceMember,以及如上所示,在一个地方。

两者之间有什么区别?

提前感谢您的任何帮助。

1 个答案:

答案 0 :(得分:8)

查看方法签名。在......

Mapper.CreateMap<Role, RoleDto>()
           .ForMember(x => x.Users, opt => opt.Ignore())
           .ForSourceMember(x => x.Users, opt => opt.Ignore());

... ForMember是一种需要名为Expression<Func<RoleDto>>的{​​{1}}参数的方法,而destinationMember需要一个名为ForSourceMember的{​​{1}}参数。所以

  • Expression<Func<Role>>配置目标类型的成员。
  • sourceMember配置源类型的成员。

在您的情况下,源类型和目标类型都有成员ForMember,因此调用看起来相同,但它们不是。他们应该同样的事情,但有趣的是ForSourceMember似乎对忽略成员没有任何影响。也许这是一个错误。