实体框架4.1:覆盖IEnumerable< ValidationResult>验证 [英] Entity Framework 4.1: Override IEnumerable<ValidationResult> Validate
问题描述
{
public string Id {get; set;}
public string Name {get; set;}
public virtual IEnumerable< ValidationResult>验证(ValidationContext validationContext)
{
if(this.Name ==animal)
{
yield返回新的ValidationResult(Invalid Name from base,new [] { 名称 });
}
}
}
public class Dog:Animal,IValidatableObject
{
public string所有者{get; set;}
public override IEnumerable< ValidationResult>验证(ValidationContext validationContext)
{
/ *
这里调用base validate
* /
if(this.Name ==dog)
{
yield return new ValidationResult(Invalid Name From dog,new [] {Name});
}
}
}
我有一个基类 Animal
实现 IValidatableObject
,现在从 Dog
子类的验证
方法也实现 IValidatableObject
,我想调用基类的 Validate
方法。
我尝试了(它不会调用基类验证)
base.Validate(validationContext);
在你的代码示例中,你没有得到你的狗类从动物。
只有通过结果集迭代
,才会调用动物的验证方法:
public class Dog:Animal
{
public override IEnumerable< ValidationResult>验证(ValidationContext validationContext)
{
foreach(var result in base.Validate(validationContext))
{
}
//狗具体验证如下这里...
}
}
只调用base.Validate()没有迭代返回的集合将
不调用基础的验证方法。
希望,这有帮助。
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" });
}
}
}
I have a base class Animal
which implements IValidatableObject
, now from Dog
sub-class's Validate
method which also implements IValidatableObject
, I want to call base class's Validate
method.
I tried doing (it doesn't call base class's validate)
base.Validate(validationContext);
In your code sample you did not derive your dog class from Animal. The animal's validation method will only be called if you iterate through the result set:
public class Dog : Animal
{
public override IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
foreach(var result in base.Validate(validationContext))
{
}
//dog specific validation follows here...
}
}
Only calling base.Validate() without iterating through the returned collection will not call the base's validation method. Hope, this helps.
这篇关于实体框架4.1:覆盖IEnumerable< ValidationResult>验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!