AutoMapper:ForMember 和 ForSourceMember 有什么区别?

AutoMapper: What is the Difference Between ForMember and ForSourceMember?

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

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

我正在维护其他人编写的代码。在某些地方,我看到 ForMember,在其他地方看到 ForSourceMember,并且如上所示,在一个地方两者都看到。

两者有什么区别?

在此先感谢您的帮助。

查看方法签名。在...

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

...ForMember 是一种需要名为 destinationMemberExpression<Func<RoleDto>> 参数的方法,而 ForSourceMember 需要名为 [=16] 的 Expression<Func<Role>> 参数=].所以

  • ForMember 配置目标类型的成员。
  • ForSourceMember 配置源类型的成员。

在您的例子中,源类型和目标类型都有成员 UserId,因此调用 看起来 相同,但实际上并非如此。他们应该同样的事情,但有趣的是ForSourceMember似乎对忽略成员没有任何作用。也许这是一个错误。