5
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方法。实体框架4.1:覆盖的IEnumerable <为ValidationResult>验证

我想这样做(没有调用基类的validate)

base.Validate(validationContext); 

回答

8

在您的代码示例,你不是从动物派生你的狗类。

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()不通过返回的集合集合将会 不调用基的验证方法:如果你迭代 在结果集 动物的验证方法才会被调用。 希望,这有助于。

+0

其实我的代码中包含这部分“公共类犬:动物”(从动物继承)。在提出问题时,这只是一个错字,纠正了它。 –

+0

您是否尝试调用base.Validate()并遍历返回的结果集?这应该可以解决你的问题。动物的验证方法被调用! – Hans

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

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

你需要调用ToList()因为基方法返回IEnumerable类型的数据