Entity Framework 4.1: переопределить IEnumerable<ValidationResult> проверить
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 ответа
Решение
В вашем примере кода вы не получили свой класс собаки от 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() без перебора возвращаемой коллекции не вызовет метод проверки базы. Надеюсь это поможет.
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
тип данных