使用ForSourceMember时,AutoMapper的Ignore()无法正常工作?

kho*_*vat 7 c# mapping automapper automapper-3

我试图忽略源类型的属性.我已经定义了这样的映射:

var map = AutoMapper.Mapper.CreateMap<Article, IArticle>();
map.ForSourceMember(s => s.DateCreated, opt => opt.Ignore());
map.ForSourceMember(s => s.DateUpdated, opt => opt.Ignore());
Run Code Online (Sandbox Code Playgroud)

当我调用Map功能时,

AutoMapper.Mapper.Map(article, articlePoco);
Run Code Online (Sandbox Code Playgroud)

无论如何,目的地的属性都会更新.我正在使用从NuGet下载的最新稳定版本.

任何想法为什么这不起作用?

我发现了类似的问题,但没有答案.[问题]:AutoMapper的Ignore()不起作用?

Gru*_*nny 6

更改映射以使用ForMember:

map.ForMember(s => s.DateCreated, opt => opt.Ignore());
map.ForMember(s => s.DateUpdated, opt => opt.Ignore());
Run Code Online (Sandbox Code Playgroud)

  • 是的,这样做了,但对我来说,在进行映射时设置目标成员上的忽略有点奇怪,因为我实际上忽略了源中的数据而不是目标. (2认同)
  • 我也犯了同样的错误。我责怪 AutoMapper 的文档。它肯定不是为初学者编写的。不知何故,在阅读维基和谷歌搜索后,我无法得到明确的答案。到目前为止。 (2认同)

giz*_*ero 5

如果您要忽略的属性仅存在于源对象中,那么您可以MemberList.Source结合 option 方法DoNotValidate()。见下文:

CreateMap<IArticle, Article>(MemberList.Source)
    map.ForSourceMember(src => src.DateCreated, opt=> opt.DoNotValidate());
    map.ForSourceMember(src => src.DateUpdated, opt => opt.DoNotValidate());
Run Code Online (Sandbox Code Playgroud)

如果您正在使用AssertConfigurationIsValid并希望忽略某些源属性的验证,这是完美的。