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
类型数据