entity framework4.1:覆盖IEnumerable validation

public abstract class Animal , IValidatableObject { public string Id {get;set;} public string Name {get;set;} public virtual IEnumerable 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 Validate(ValidationContext validationContext) { /* Here call base validate */ if (this.Name == "dog") { yield return new ValidationResult("Invalid Name From dog", new[] { "Name" }); } } } 

我有一个实现IValidatableObject的基类Animal ,现在来自Dog子类的Validate方法,它也实现了IValidatableObject ,我想调用基类的Validate方法。

我试过(它没有调用基类的validation)

 base.Validate(validationContext); 

在您的代码示例中,您没有从Animal派生您的狗类。 只有遍历结果集时才会调用动物的validation方法:

 public class Dog : Animal { public override IEnumerable Validate(ValidationContext validationContext) { foreach(var result in base.Validate(validationContext)) { } //dog specific validation follows here... } } 

只调用base.Validate()而不迭代返回的集合将不会调用base的validation方法。 希望这可以帮助。

 public class Dog : Animal { public override IEnumerable Validate(ValidationContext validationContext) { foreach(var result in base.Validate(validationContext).ToList()) { } //dog specific validation follows here... } } 

您需要调用ToList()因为基本方法返回IEnumerable类型数据