0

我是企业图书馆的新手。我正在尝试验证类型的业务对象JuvenileClientContactItem

JuvenileClientContactItem对象本身包含对象,在这种情况下,是类型对象的两个实例AddressType

当我执行以下调用来验证 时JuvenileClientContactItem,我希望所有包含的对象也将被验证,并且PersonType对象中遇到的任何错误都将添加到ValidationResults集合中,但只JuvenileClientContactItem执行了对 oject 的验证。

validationResults = validationService
    .Validate(Of JuvenileClientContactItem) _
    (juvenileClientContactItem, _
    "JuvenileClientContactItemRuleSet", "PersonTypeRuleSet")

这是 Enterprise Library Validate 函数的签名:

Public Shared Function Validate(Of T)(ByVal target As T, _
    ByVal ParamArray rulesets() As String) _
    As Microsoft.Practices.EnterpriseLibrary.Validation.ValidationResults

要验证Address对象中的两个子对象JuvenileClientContactItem,我需要对该Validate方法执行单独的调用,例如:

residentaddressValidationResults = validationService
    .Validate(Of BusinessObjects.AddressType) _
    (juvenileClientContactItem.ResidenceAddress, _
    Me.View, "AddressTypeRuleSet")

我很想编写自己的通用验证方法,该方法使用反射来检查传递给验证的对象,寻找支持自我验证的包含对象,并执行调用并将所有验证的结果聚合到一个返回的集合中。有更好的方法吗?

编辑:

按照下面提到的建议,我添加了以下代码:

<System.Serializable()> _
<DataContract()> _
<HasSelfValidation()> _
<ObjectValidator()> _
Public Class AddressType

...并得到 ObjectValidatorAttribute 无法应用的错误,因为该属性在此声明类型上无效。

为什么?我该如何纠正?

4

1 回答 1

1

您应该使用 装饰TheJuvenileClientContactItem类型的属性ObjectValidatorAttribute,因为默认情况下验证应用程序块不会验证对象图(以防止性能问题和堆栈溢出异常)。

于 2011-03-23T17:26:20.583 回答