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

get*_*tit 5 .net c# nhibernate

假设有一个像这样class A的引用class 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;
Run Code Online (Sandbox Code Playgroud)

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

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

是否可以对其进行配置,以便验证A还可以验证B?的属性?

*编辑:

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

在存储库中 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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Jas*_*ing 0

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

对关联对象递归执行验证。如果对象是集合或数组,则将递归地验证元素。如果对象是 Map,则递归地验证值元素。

你试过了吗?

class A
{
    [NotNull]
    string Alpha;

    [Valid]
    B bObject;
}
Run Code Online (Sandbox Code Playgroud)