2013-01-11 50 views
5

说有一个class A调用像创建一个实例时,有这样的如何使用验证嵌套对象自动

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; 

class B参考现在,代码调用NHibernate.Validator.Engine.ValidatorEngine.Validate

但是,它只验证A (Alpha)的成员。当NHibernate尝试持续该对象时,它会失败,因为数据库不允许null对于Object

是否可以对其进行配置以使验证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的行?

回答

0

documentation,您可以使用有效的属性:

关联的对象上递归执行验证。如果对象是一个Collection或一个数组,则递归地验证这些元素。如果对象是Map,则递归地验证值元素。

你试过吗?

class A 
{ 
    [NotNull] 
    string Alpha; 

    [Valid] 
    B bObject; 
}