我可以使用IValidatableObject接口进行自动基本DataAnnotations验证吗?

时间:2011-07-21 12:55:29

标签: c# asp.net-mvc entity-framework entity-framework-4 data-annotations

我在属性上使用了很多EF4 POCO实体和一些默认的DataAnnotations ValidationAttribute(必需,StringLength,RegularExpression等)(这是我们使用的一些T4脚本生成的),我想自定义验证实体通过IValidatableObject接口。

我的问题是: 我可以在IValidatable.Validate()方法的实现中调用一些基本方法来验证所谓的ValidationAttribute上的所有属性吗?编写相同的代码以验证每个属性将耗费大量时间。

验证示例:

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        ICollection<ValidationResult> validationResults = new List<ValidationResult>();

        if (string.IsNullOrEmpty(DatabaseName))
        {
            validationResults.Add(new ValidationResult(Messages.Error_OrderedComponentDatabase_DatabaseName_Required, new string[] { "DatabaseName" }));
        }
        else if (DatabaseName.Length > 50)
        {
            validationResults.Add(new ValidationResult(Messages.Error_OrderedComponentDatabase_DatabaseName_TooLong, new string[] { "DatabaseName" }));
        }

        return validationResults;
    }

首选实现(伪代码):

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        ICollection<ValidationResult> validationResults = someInstance.ValidateOnDataAnnotations(this);

      // do some extra custom validation...

        return validationResults;
    }

欢迎任何建议!提前谢谢。

1 个答案:

答案 0 :(得分:1)

找到解决方案。我基于以下帖子做了一个linq查询:DataAnnotations validation from a class

问题已得到解答。

相关问题