如何自动使用验证嵌套对象
本文关键字:嵌套 对象 验证 何自动 | 更新日期: 2023-09-27 17:52:36
假设有一个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
尝试持久化对象时,它失败了,因为数据库不允许Object
为null。
是否可以配置它,以便验证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;
}