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

时间:2013-01-11 22:32:25

标签: c# .net nhibernate

假设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尝试保留对象时,它会失败,因为数据库不允许Object null

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

1 个答案:

答案 0 :(得分:0)

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

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

你试过吗?

class A
{
    [NotNull]
    string Alpha;

    [Valid]
    B bObject;
}