如何在使用AutoMapper时跳过自定义验证属性?
本文关键字:自定义 验证 属性 AutoMapper | 更新日期: 2023-09-27 18:02:06
我用AutoMapper将类Foo映射到类Bar。Bar是Foo的一个ViewModel。Bar拥有更少的属性,但是它拥有的所有属性都与对应的Foo属性完全匹配,除了Bar在Foo中不存在的一个属性上有一个自定义验证属性。
public class Foo
{
string Prop1 { get; set; }
string Prop2 { get; set; }
string Prop3 { get; set; }
string Prop4 { get; set; }
string Prop5 { get; set; }
}
public class Bar
{
string Prop1 { get; set; }
string Prop2 { get; set; }
[CustomValidation]
string Prop3 { get; set; }
}
我想使用AutoMapper将Foo映射到Bar,但是我想而不是在映射发生时运行"CustomValidation"属性。
这是我的映射代码的样子…
Mapper.Initialize(cfg => cfg.CreateMap<Foo, Bar>(MemberList.None)
.ForMember("Prop3", m => m.Ignore()));
即使使用MemberList。None在和中传递,Prop3被特别忽略…它仍然会触发CustomValidation属性。
我怎样才能阻止它这样做呢?
或者……
我可以用非默认构造函数触发CustomValidation属性吗?
把这个相当奇怪的问题放在上下文中。我正在尝试单元测试执行此映射的控制器方法。CustomValidation属性命中数据库,我希望避免这种情况,以加快单元测试。我确实设置了CustomValidation属性,以便在构造函数中接受IoC容器,这将允许我传入模拟并避免数据库,这将是完全避免验证的完美替代解决方案。Auto Mapper不关心验证属性。
如果您不希望在测试中执行真正的验证,我认为将服务或存储库抽象到数据库中,以便您可以在测试中模拟或存根它是一种有效的方法。
我真的认为Auto Mapper不是你的问题。