如何在使用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容器,这将允许我传入模拟并避免数据库,这将是完全避免验证的完美替代解决方案。

如何在使用AutoMapper时跳过自定义验证属性?

Auto Mapper不关心验证属性。

如果您不希望在测试中执行真正的验证,我认为将服务或存储库抽象到数据库中,以便您可以在测试中模拟或存根它是一种有效的方法。

我真的认为Auto Mapper不是你的问题。