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" }); 
     } 
    }  

    } 

J'ai une classe de base Animal qui implémente IValidatableObject, maintenant de Dog méthode de Validate sous-classe qui implémente également IValidatableObject, je veux appeler la méthode de la classe de base Validate.Entity Framework 4.1: Remplacer IEnumerable <ValidationResult> Valider

J'ai essayé de faire (il ne remet pas la validation de la classe de base)

base.Validate(validationContext); 

Répondre

8

Dans votre exemple de code que vous ne l'avez pas dérivez votre classe de chien de l'animal. La méthode de validation de l'animal ne sera appelée que si vous itérer par le jeu de résultats:

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

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

Seulement appeler base.Validate() sans itérer la collection récupérerez pas appeler la méthode de validation de la base. Espérons, cela aide.

+0

En fait, mon code contient cette partie "public class Chien: Animal" (hériter d'animaux). C'était juste une faute de frappe en posant la question, l'a corrigée. –

+0

Avez-vous essayé d'appeler base.Validate() et d'itérer dans le jeu de résultats retourné? Cela devrait résoudre votre problème. La méthode de validation de l'animal est appelée! – 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... 
    } 
} 

Vous devez appeler ToList() puisque la méthode de base retourne IEnumerable données de type

Questions connexes