【发布时间】:2010-10-31 13:37:36
【问题描述】:
有没有办法告诉 AutoMapper 忽略除显式映射的属性之外的所有属性?
我有可能从外部更改的外部 DTO 类,我想避免明确指定要忽略的每个属性,因为添加新属性会在尝试将它们映射到我自己的对象时破坏功能(导致异常) .
【问题讨论】:
-
使用 ValueInjecter valueinjecter.codeplex.com/documentation 创建具有映射算法并在特定属性之间映射的 ValueInjections,它们不关心其余属性
-
对于那些使用 Automapper > 版本 5 的用户,请跳至查看详细答案
.ForAllOtherMembers(opts => opts.Ignore()) -
@Schneider ".ForAllOtherMembers(opts => opts.Ignore())" 与此处的扩展名 "IgnoreAllNonExisting" 不同,主要区别在于如果您没有显式配置属性,则使用 ".ForAllOtherMembers (opts => opts.Ignore())" 你不会得到任何映射。在没有明确配置属性的情况下使用“IgnoreAllNonExisting”,您仍然会得到一些属性映射(具有相同名称的属性)的值。
-
是的。 ForAllOtherMembers 就是答案。 IgnoreUnmapped 答案除了导致 config-valid-assert 通过之外什么都不做,因为无论如何都会忽略未映射的成员。
-
值得注意的是,这样做时,您明确隐藏了正在映射的类中可能相关或重要的更改。每当映射的类发生变化时,对每个属性进行显式映射都会使您的测试中断,从而迫使您正确评估它。 (假设您有一个测试正在执行
AssertConfigurationIsValid()调用)因此,我认为“忽略其余部分”是一种反模式。
标签: .net automapper