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

9

我正在尝试忽略源类型中的一个属性。我已经定义了如下映射:

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

当我调用Map函数时,
AutoMapper.Mapper.Map(article, articlePoco);

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

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

我发现了类似的问题,但没有附带答案。[问题]:AutoMapper的Ignore()方法无效?

2个回答

11

如果您想忽略的属性仅存在于源对象中,则可以将MemberList.Source与选项方法DoNotValidate()组合使用。如下所示:

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

如果您正在使用AssertConfigurationIsValid并且希望忽略某些源属性的验证,则此功能非常完美。


"MemberList.Source"是什么意思,你是从哪里得到的?另外,请检查一下你的代码。 - undefined
@GrantBirchmeier 请查看官方文档:https://docs.automapper.org/en/stable/Configuration-validation.html#selecting-members-to-validate - undefined

8

使用 ForMember 更改映射:

map.ForMember(s => s.DateCreated, opt => opt.Ignore());
map.ForMember(s => s.DateUpdated, opt => opt.Ignore());

2
是的,这确实有用,但对我来说,在进行映射时将忽略设置为目标成员有点奇怪,因为我实际上是在忽略源中的数据而不是目标中的数据。 - khorvat
3
我也犯了同样的错误。我把责任归咎于AutoMapper的文档。毫无疑问,它并不适合初学者阅读。尽管我在阅读Wiki和谷歌搜索后仍然无法得到确定的答案,直到现在为止。 - iphone007
这不应该被标记为答案:SourceDto.FooDestiationDto //Foo 不是成员!!! - Brian Ogden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接