gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:51:53 25 4
gpt4 key购买 nike

假设有一个 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 尝试保留对象时,它失败了,因为数据库不允许 Objectnull

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

最佳答案

来自documentation ,您可以使用 Valid 属性来:

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

你试过了吗?

class A
{
[NotNull]
string Alpha;

[Valid]
B bObject;
}

关于c# - 如何使用自动验证嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14287761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com