有人可以解释System.Data.Entity.Validation.DbEntityValidationResult
和System.ComponentModel.DataAnnotations.ValidationResult
类之间的关系吗?
IValidatableObject
正在处理可用于验证使用数据注释的对象的ValidationResult
个对象。同时,使用Entity Framework DataContext存储对象时,DbEntityValidationResult
个对象用于报告验证错误。所以我想知道两者之间的确切关系。是否仅在实际与数据库交互时使用DbEntityValidationResult
个对象?
EF是内部使用的ComponentModel
验证还是完全独立的两个验证,除了它们都依赖于数据注释?
答案 0 :(得分:2)
System.ComponentModel.DataAnnotations.ValidationResult
- 用于使用数据注释的对象。 ValidationResult
类包含一个属性,该属性包含错误适用的属性名称。
基本上,实体框架在其自己的方法中使用System.ComponentModel
进行验证。
System.Data.Entity.Validation.DbEntityValidationResult
- 仅由实体框架使用。 DbValidationError 包含整个验证对象的一个属性的错误。
DbEntityValidationResult
实际上是 EntityFramework程序集的一部分。
当实体框架在将Validation
转换为ValidatableObjectValidator
时验证数据(在IEnumerable<DataAnnotaion.ValidationResult>
类的IEnumerable<DbValidationError>
方法中发生):
foreach (var validationResult in validationResults)
{
if (validationResult == null)
{
continue;
}
// let's treat null or empty .MemberNames the same way as one undefined (null) memberName
var memberNames = validationResult.MemberNames == null || !validationResult.MemberNames.Any()
? new string[] { null }
: validationResult.MemberNames;
foreach (var memberName in memberNames)
{
yield return new DbValidationError(memberName ?? propertyName, validationResult.ErrorMessage);
}
}
因此,ValidationResult.MemberNames
中的每个名称都会创建一个DbValidationError
(对于特殊情况,例如null或空.MemberNames或.MemberNames中的空名称,会有一些例外)强>
与来源的链接: