实体框架4.1:覆盖IEnumerable <validationresult>验证</validationresult>

时间:2011-08-14 14:37:52

标签: c# entity-framework entity-framework-4 entity-framework-4.1

    public abstract class Animal , IValidatableObject
    {
        public string Id {get;set;}
        public string Name {get;set;}
        public virtual IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            if (this.Name == "animal")
            {
                yield return new ValidationResult("Invalid Name From base", new[] { "Name" });
            }
        }
    }




    public class Dog: Animal, IValidatableObject
    {
        public string Owner {get;set;}

  public override IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        /*
          Here call base validate
         */

        if (this.Name == "dog")
        {
            yield return new ValidationResult("Invalid Name From dog", new[] { "Name" });
        }
    }     

    }

我有一个实现Animal的基类IValidatableObject,现在来自Dog子类的Validate方法,它也实现了IValidatableObject,我想调用基类的Validate方法。

我尝试过(它没有调用基类的验证)

base.Validate(validationContext);

2 个答案:

答案 0 :(得分:9)

在您的代码示例中,您没有从Animal派生您的狗类。 只有在迭代时才会调用动物的验证方法 通过结果集:

public class Dog : Animal
{
  public override IEnumerable<ValidationResult> Validate(ValidationContext      validationContext)
  {
     foreach(var result in base.Validate(validationContext))
     {
     }

     //dog specific validation follows here...
  }
}

只调用base.Validate()而不迭代返回的集合 不要调用base的验证方法。 希望,这有帮助。

答案 1 :(得分:0)

ToList()

您需要调用IEnumerable,因为基本方法返回<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="AppConsole" class="org.apache.log4j.ConsoleAppender"> <param name="Target" value="System.err" /> <param name="Encoding" value="ISO-8859-15" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{dd.MM.yyyy HH:mm:ss} %5p kontext.%c{1}:%L - %m%n" /> </layout> </appender> <root> <level value="debug" /> <appender-ref ref="AppConsole" /> </root> </log4j:configuration> 类型数据