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

    } 

Mam klasy bazowej Animal który implementuje IValidatableObject, teraz z Dog podklasa za Validate metody, które również implementuje IValidatableObject, chcę zadzwonić Validate metoda klasy bazowej.Entity Framework 4.1: Przestawianie IEnumerable <ValidationResult> Weryfikuj

Próbowałem robić (nie nazywają validate klasa bazowej)

base.Validate(validationContext); 

Odpowiedz

8

W swojej próbki kodu, że nie czerpią swoją klasę pies od zwierzęcia. metoda walidacji zwierzęcia zostanie wywołana tylko jeśli iteracyjne poprzez zestaw wyników:

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

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

Tylko nazywając base.Validate() bez iteracja zwróconej kolekcji nie wywołać metodę sprawdzania stacji bazowej. Hope, to pomaga.

+0

Właściwie mój kod zawierający tę część "public class Dog: Animal" (dziedziczą Animal). To był tylko literówka, gdy zadawał pytanie, poprawił je. –

+0

Czy próbowałeś wywołać base.Validate() i iterować przez zwrócony zestaw wyników? To powinno rozwiązać twój problem. Zatwierdza się metodę Validate zwierząt! – 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... 
    } 
} 

Trzeba zadzwonić ToList() ponieważ metoda zwraca IEnumerable baza danych typu

Powiązane problemy