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 тип данных

Другие вопросы по тегам