Entity Framework 4.1: переопределить IEnumerable <ValidationResult>проверить - PullRequest
5 голосов
/ 14 августа 2011
    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 ]

9 голосов
/ 14 августа 2011

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

0 голосов
/ 19 июня 2015
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 данные типа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...