5

说有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;

现在,当为 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
    }
}

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

4

1 回答 1

0

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

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

你试过了吗?

class A
{
    [NotNull]
    string Alpha;

    [Valid]
    B bObject;
}
于 2013-01-29T01:58:02.187 回答