如何自动使用验证嵌套对象

本文关键字:嵌套 对象 验证 何自动 | 更新日期: 2023-09-27 17:52:36

假设有一个class Aclass B的引用是这样的

class A
{
    [NotNull]
    string Alpha;
    B bObject;
}
class B
{
   [NotNull]
   string Beta;
}
A a = new A();
a.Alpha = "test"
a.bObject = new b();
a.bObject.Beta = null;

现在当为A的实例调用Create时,代码调用NHibernate.Validator.Engine.ValidatorEngine.Validate

但是,它只验证A (Alpha)的成员。当NHibernate尝试持久化对象时,它失败了,因为数据库不允许Objectnull

是否可以配置它,以便验证A也验证B的属性?

*编辑:

我目前解决这个问题的方法是在存储库需要创建/更新A的任何地方手动调用Validate(A.bObject),例如:

A

的存储库中
public void Update(A entity)
{
    //I want to avoid having to do this in every class repository that has a 
    //reference to B
    var errorsList = valEngine.Validate(entity.bObject);
    if (errorsList .Length == 0)
    {
        status = base.Create(entity); 
        //Simply calls the appropriate NH function to persist the object
    }
}

如何避免每次重复验证B的行?

如何自动使用验证嵌套对象

在文档中,您可以使用Valid属性:

对关联对象递归执行验证。如果对象是Collection或数组,则对元素进行递归验证。如果对象是Map,则值元素递归验证。

你试过了吗?
class A
{
    [NotNull]
    string Alpha;
    [Valid]
    B bObject;
}