0

我是新来的企业图书馆。我正在尝试验证JuvenileClientContactItem类型的业务对象。执行业务对象的验证。包含的对象怎么样?

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

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

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

这里的企业库验证功能的签名:

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

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

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

我很想写我自己的通用验证方法,它使用反射来检查对象通过验证查找支持自我验证的包含对象,并执行调用并将所有验证的结果汇总到单个返回的集合中。有更好的方法吗?

编辑:

继下面提到的建议,我添加了这个代码:

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

...而得到了错误的ObjectValidatorAttribute可以应用于不BA因为属性是不是这有效声明类型。

为什么?我如何纠正它?

回答

1

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

+0

请参阅我的编辑关于在尝试此操作时遇到的错误:“无法应用ObjectValidatorAttribute,因为该属性在此声明类型中无效”。 – ChadD 2011-03-23 17:33:04

+0

@Velika:你应该将属性放在'JuvenileClientContactItem'类型的属性中,而不是'AddressType'本身。 – Steven 2011-03-23 19:45:43

+0

我试过了。同样的错误。 – ChadD 2011-03-23 19:50:07