之前的Code First系列文章已经演示了如何使用Fluent API和Data Annotation的方式配置实体的属性,比如配置Destination类的Name属性长度不大于50等。本文介绍EF里更强大的Validation API达到实体属性验证的效果。主要是通过ValidationAttributes属性和IValidatebleObject接口来进行的验证。

一、实体属性的简单验证(GetValidationResult方法)

修改person类LastName属性不超过10个字符:

        [MaxLength()]
public string LastName { get; set; }

看看程序中如何使用:

        /// <summary>
/// 验证单个实体的属性:GetValidationResult().IsValid方法
/// </summary>
private static void ValidateNewPerson()
{
var person = new DbContexts.Model.Person
{
FirstName = "Julie",
LastName = "Lerman",
Photo = new DbContexts.Model.PersonPhoto { Photo = new Byte[] { } }
};
using (var context = new DbContexts.DataAccess.BreakAwayContext())
{
if (context.Entry(person).GetValidationResult().IsValid)
Console.WriteLine("Person is Valid");
else
Console.WriteLine("Person is Invalid");
}
}

显然,控制台打印出来的是:Person is Valid,因为插入的LastName才6个字符,不到标注的最大10个长度。
注:因为修改了实体,故必须重新生成下数据库,否则报错。

上面的方法通过GetValidationResult验证的实体。当然,GetValidationResult不仅验证实体属性的最大长度,同时验证任何标注ValidationAttribute的实体属性:

  • DataTypeAttribute [DataType(DataType enum)]  -> 实体类型验证
  • RangeAttribute [Range (low value, high value, error message string)]  -> 范围验证
  • RegularExpressionAttribute [RegularExpression(@”expression”)]  -> 正则表达式验证
  • RequiredAttribute [Required]  -> 非空验证
  • StringLengthAttribute [StringLength(max length value,MinimumLength=min length value)]  -> 最大程度验证
  • CustomValidationAttribute  -> 自定义验证

GetValidationResult方法返回的是一个ValidationResult类型,ValidationResult类型不仅包括IsValid属性,还包括其他一个很重要的属性:ValidationErrors。修改下LastName上的Data Annotation标注:

        [MaxLength(, ErrorMessage= "Dude! Last name is too long! 10 is max.")]
public string LastName { get; set; }

再修改下方法:

                var result = context.Entry(person).GetValidationResult();
if (!result.IsValid)
{
Console.WriteLine(result.ValidationErrors.First().ErrorMessage);
}

方法分析:如果验证不通过,就打印出错误信息。这个错误信息是上面自定义错误信息:Dude! Last name is too long! 10 is max.

方法里的ValidationErrors方法后点了个First方法,意为获取第一个错误,因为ValidationErrors是一个集合类型,记录实体的所有验证错误。看图:

aaarticlea/png;base64,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m7etRQAsJ+zbWaJpaAIEi+fOt42MVl+8VFdXd/To0Za2VgzEZDGXlpeV7Nk9Zht//fXXnXbH6WMVH7/7PhBYvHBRV1fXth3b123aePXmjW27dsamJnlR8Hq9v3/7HUO7tvL4iUXfzgv5vNu2bm5teXzr5vXL1RcB8J49e5qbm8vKyjQajSQjhuU/+3yWx+unEymXnPrNf/+Lxtq7owO9+0p2eVzuf/zH3z5+3LJj557Orj661xYlfPvOvdmz5xgMBgCFZVJnz5y8cf0yAM5mUl98/ulUfDIUCL7/7gexyITFZN25fbffG3rztXfs467Tx09dq75MkXrDwdCyJUsrKiro0Fit1m+//mZmavrGlavnz5w1arRzvvhcFDikCDzHCDw70Dd45NDRbVt2uhzeLz77cmYqde9OzYrvl6eTqanJiQ6rcePG9UePHj1/4dLDuoZIdOLo0eNTUzNU07Vw7ryAxzs2MHCmokJIpStKy9IT8bdef+Pu3ZoRm3PlqnX+QOSN19+uOnfpZEVly2ONwMkcI65csTadYvbtL9uydefA4OipU5X1NTWnDpcPd3Xv2rKFTTPXr974za9/m5jJLFu6oquzjzaEY1ijQVe2f8/2zRtELiNxOSD4b/7yL1oeNdfX1r32m9eDnvDhg0dPHDnZ19l7/PCRno7O1//xHzyO8f37Ss6ererpHti2dZdBb3n7rfe6u/pPVFQuW7oiGIhu2ritpbn99q2aixeuAIH9+8oeP265fKl60by5AY97wbffXL5wPuz3vff2O3yOoTrPjWs2aB63nTx6YvumbVcvXln9/apua8cXn3waDYa2b95y5eKl5keN+0p2xyPRtStX3bx67frlK7euXWcz2T07d61ZsXJyYurXv34jw8iygnNsdu+eHffv35SFzIa1K9x2W9m+Uk2rDggQDCzPyQQjwI8fP541a9bZs2ez2awaC/IMBNaPRbrk6RcWIaTwSgrawGdei6UIYBoCgxQI+FMsA7msBAQyianRgS63behRXc3gQA/kpaICIMs801j38MyJSj4rAAa3zbtu5YZEPNXb0be/ZF9yanLPzm0GbYsisOfPVA73D2xev6G3swuJ0peffzE+PHL88JF7t25XVZ6JBILrV68x6w0fvff+8cNHKk+d7u7va2xrWb950+2ae26v5+jxY2WHyj0+b9nB0gP79s/7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" alt="" />

更简单的方法就是可以直接遍历:

        /// <summary>
/// 通用的打印错误方法
/// </summary>
private static void ConsoleValidationResults(object entity)
{
using (var context = new DbContexts.DataAccess.BreakAwayContext())
{
var result = context.Entry(entity).GetValidationResult();
foreach (DbValidationError error in result.ValidationErrors)
{
Console.WriteLine(error.ErrorMessage);
}
}
}

注:需要应用命名空间:System.Data.Entity.Validation

二、定制验证规则(CustomValidationAttributes)

上面的方法只是简单的实体属性验证,真实项目中的实体验证肯定是多种多样复杂多变的,来看看如何定制实体的验证规则达到更强大的验证功能。

    /// <summary>
/// 自定义验证类BusinessValidations
/// </summary>
public static class BusinessValidations
{
/// <summary>
/// 验证description不包括!:) :( 等符号
/// </summary>
public static ValidationResult DescriptionRules(string value)
{
var errors = new System.Text.StringBuilder();
if (value != null)
{
var description = value as string;
if (description.Contains("!"))
{
errors.AppendLine("Description should not contain '!'.");
}
if (description.Contains(":)") || description.Contains(":("))
{
errors.AppendLine("Description should not contain emoticons.");
}
}
if (errors.Length > )
return new ValidationResult(errors.ToString());
else
return ValidationResult.Success;
}
}

在Destination类的Description属性上应用这个验证:

        [MaxLength()]
[CustomValidation(typeof(BusinessValidations), "DescriptionRules")]
public string Description { get; set; }

上测试方法:

        /// <summary>
/// 定制验证规则测试方法
/// </summary>
public static void ValidateDestination()
{
ConsoleValidationResults(new DbContexts.Model.Destination
{
Name = "New York City",
Country = "U.S.A",
Description = "Big city! :) "
});
}

打印结果:
Description should not contain '!'.
Description should not contain emoticons.

单独验证实体的属性:
上一篇文章演示了如何使用DbEntityEntry操作实体的单个属性,例:context.Entry(trip).Property(t => t.Description); 返回的就是Trip类的Description属性,继续看方法:

        /// <summary>
/// 单独验证实体的属性:GetValidationErrors方法
/// </summary>
private static void ValidatePropertyOnDemand()
{
var trip = new DbContexts.Model.Trip
{
EndDate = DateTime.Now,
StartDate = DateTime.Now,
CostUSD = 500.00M,
Description = "Hope you won't be freezing :)"
};
using (var context = new DbContexts.DataAccess.BreakAwayContext())
{
var errors = context.Entry(trip).Property(t => t.Description).GetValidationErrors();
Console.WriteLine("# Errors from Description validation: {0}", errors.Count());
}
}

打印结果:
# Errors from Description validation: 1

注:Trip类的Description也需要标注定制的验证规则:

        [CustomValidation(typeof(BusinessValidations), "DescriptionRules")]
public string Description { get; set; }

三、使用IValidatebleObject接口验证

除了定制验证规则,还可以利用IValidatebleObject接口进行实体的验证。实战:添加Trip类的StartDate必须在EndDate之前,先看代码:

    /// <summary>
/// 旅行类
/// </summary>
public class Trip : IValidatableObject
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Identifier { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
[CustomValidation(typeof(BusinessValidations), "DescriptionRules")]
public string Description { get; set; }
public decimal CostUSD { get; set; }
[Timestamp]
public byte[] RowVersion { get; set; } public int DestinationId { get; set; }
[Required]
public Destination Destination { get; set; }
public List<Activity> Activities { get; set; } public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (StartDate.Date >= EndDate.Date)
yield return new ValidationResult("Start Date must be earlier than End Date", new[] { "StartDate", "EndDate" });
}
}

方法分析:让Trip类实现IValidatableObject接口并重写接口里的验证方法Validate。方法里对比了两个时间,返回对比结果ValidationResult。当然Validate方法里可以添加更多验证。

测试方法:

        /// <summary>
/// 验证实体单个属性:IValidatableObject接口的Validate方法
/// </summary>
private static void ValidateTrip()
{
ConsoleValidationResults(new DbContexts.Model.Trip
{
EndDate = DateTime.Now,
StartDate = DateTime.Now.AddDays(), //开始时间比结束时间晚2天
CostUSD = 500.00M,
Destination = new DbContexts.Model.Destination { Name = "Somewhere Fun" }
});
}

开始时间比结束时间晚2天,很明显不符合验证规则。跑下程序会输出两次:Start Datemust be earlier than End Date. 因为同时验证了StartDate和EndDate。

注:使用IValidatableObject接口所有Mode、DataAccess和BreakAwayConsole都需要添加引用:System.ComponentModel.DataAnnotations

试着向Validate方法里添加过滤关键字的验证,现在Validate方法里已经有两个验证了:

        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
//验证结束时间必须大于开始时间
if (StartDate.Date >= EndDate.Date)
yield return new ValidationResult("Start Date must be earlier than End Date", new[] { "StartDate", "EndDate" }); //过滤关键字验证
var unwantedWords = new List<string> { "sad", "worry", "freezing", "cold" };
var badwords = unwantedWords.Where(word => Description.Contains(word));
if (badwords.Any())
yield return new ValidationResult("Description has bad words: " + string.Join(";", badwords), new[] { "Description" }); }

注:需要引用system.Linq

修改测试方法:

        /// <summary>
/// 验证实体单个属性:IValidatableObject接口的Validate方法
/// </summary>
private static void ValidateTrip()
{
ConsoleValidationResults(new DbContexts.Model.Trip
{
EndDate = DateTime.Now,
StartDate = DateTime.Now.AddDays(), //开始时间比结束时间晚2天
CostUSD = 500.00M,
Description = "Don't worry about freezing on this trip", //待过滤的关键字
Destination = new DbContexts.Model.Destination { Name = "Somewhere Fun" }
});
}

加了一个Description属性,看看输出:
Start Date must be earlier than End Date
Start Date must be earlier than End Date
Description has bad words: worry;freezing

CustomValidationAttributes不仅可以验证实体的单个属性,同样可以验证整个类,到Trip类里添加:

        /// <summary>
/// IValidatableObject接口验证整个实体
/// </summary>
public static ValidationResult TripDateValidator(Trip trip, ValidationContext validationContext)
{
if (trip.StartDate.Date >= trip.EndDate.Date)
{
return new ValidationResult("Start Date must be earlier than End Date", new[] { "StartDate", "EndDate" });
}
return ValidationResult.Success;
} /// <summary>
/// IValidatableObject接口验证整个实体
/// </summary>
public static ValidationResult TripCostInDescriptionValidator(Trip trip, ValidationContext validationContext)
{
if (trip.CostUSD > )
{
if (trip.Description.Contains(Convert.ToInt32(trip.CostUSD).ToString()))
{
return new ValidationResult("Description cannot contain trip cost", new[] { "Description" });
}
}
return ValidationResult.Success;
}

方法必须是pubic、static。分别验证了开始日期必须小于结束日期、旅行的简介不能包含旅行的花费。将两个验证方法应用到Trip类上:

    [CustomValidation(typeof(Trip), "TripDateValidator")]
[CustomValidation(typeof(Trip), "TripCostInDescriptionValidator")]
public class Trip : IValidatableObject

再跑下程序就可以看到验证效果了。

疑问:什么时候定制验证规则,什么时候使用IValidatableObject接口验证呢?
定制验证规则一般是单独开一个类写验证规则,然后以标注的形式标注到实体类的属性上达到验证效果。如果你的代码是用Data Annotation的方式配置的,那么这个较好;
IValidatableObject接口验证的验证规则是写在类里面的,不需要单独写新类比较方便也比较好管理,但是这些验证规则只针对本类,无法实现重用。

四、验证多个实体(GetValidationErrors)

前面已经演示了使用GetValidationResult验证单个实体,同样可以使用DbContext.GetValidationErrors强制上下文验证那些被标记为添加(Added)和修改(Modified)的实体。整个验证过程是这样的:当程序运行的时候,上下文会循环所有被标记为添加和删除的实体并调用DbContext.ValidateEntity方法,ValidateEntity会在目标实体上依次调用GetValidationResult方法,所有实体验证后,GetValidationErrors会返回一个IEnumerable<DbEntityValidationResult>集合,这个集合里的的实体都是DbEntityValidationResult类型的,就是每个不通过验证的实体。ok,来看个方法:

        /// <summary>
/// 验证多个实体
/// </summary>
private static void ValidateEverything()
{
using (var context = new DbContexts.DataAccess.BreakAwayContext())
{
var station = new DbContexts.Model.Destination
{
Name = "Antartica Research Station",
Country = "Antartica",
Description = "You will be freezing!" //这个不通过验证:Description不能包括“!”
};
context.Destinations.Add(station); //添加实体
context.Trip.Add(new DbContexts.Model.Trip //添加实体
{
EndDate = new DateTime(, , ),
StartDate = new DateTime(, , ),
CostUSD = 500.00M,
Description = "A valid trip.",
Destination = station
});
context.Trip.Add(new DbContexts.Model.Trip //添加实体
{
EndDate = new DateTime(, , ),
StartDate = new DateTime(, , ), //这个不通过验证:开始日期大于结束日期
CostUSD = 500.00M,
Description = "There were sad deaths last time.",
Destination = station
});
var dbTrip = context.Trip.First();
dbTrip.Destination = station;
dbTrip.Description = "don't worry, this one's from the database"; //修改实体(这个不通过验证:worry) DisplayErrors(context.GetValidationErrors());
}
}
private static void DisplayErrors(IEnumerable<DbEntityValidationResult> results)
{
int counter = ;
foreach (DbEntityValidationResult result in results)
{
counter++;
Console.WriteLine("Failed Object #{0}: Type is {1}", counter, result.Entry.Entity.GetType().Name);
Console.WriteLine(" Number of Problems: {0}", result.ValidationErrors.Count);
foreach (DbValidationError error in result.ValidationErrors)
{
Console.WriteLine(" - {0}", error.ErrorMessage);
}
}
}

方法分析:上面的方法有两个新添加的Trip、一个新添加的Destination、一个修改的Trip。这些被上下文标记添加(Added)、修改(Modified)的实体都会被验证。方法的思路是:通过调用上下文的GetValidationErrors方法获取所有验证不通过的实体,GetValidationErrors方法返回一个IEnumerable<DbEntityValidationResult>的集合类型,这个集合就是所有不通过验证实体的集合,验证错误的实体是DbEntityValidationResult类型,遍历就可以输出之前定义的验证规则里的错误信息了。输出结果跟预期的是一致的:

Failed Object #1: Type is Destination
 Number of Problems: 1
 - Description should not contain '!'.
Failed Object #2: Type is Trip
 Number of Problems: 5
 - Start Date must be earlier than End Date
 - Start Date must be earlier than End Date
 - Start Date must be earlier than End Date
 - Start Date must be earlier than End Date
 - Description has bad words: sad
Failed Object #3: Type is Trip
 Number of Problems: 1
 - Description has bad words: worry

注:上面演示的是通过调用GetValidationResults方法然后遍历输出才知道哪些实体不通过验证的,且并没有调用上下文的SaveChanges方法。其实不调用GetValidationResults方法验证实体,直接调用SaveChanges方法也会调用GetValidationResults方法,这是EF的内部实现,由兴趣的同学可以看看EF的源码。试着用SaveChanges方法修改下:

                //DisplayErrors(context.GetValidationErrors());
//使用SaveChanges代替GetValidationErrors方法验证实体
try
{
context.SaveChanges();
Console.WriteLine("Save Succeeded.");
}
catch (DbEntityValidationException ex)
{
Console.WriteLine("Validation failed for {0} objects", ex.EntityValidationErrors.Count());
}

再运行下程序会捕捉到一个DbEntityValidationException的异常:
Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.

aaarticlea/png;base64,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" alt="" />

同样也捕获了几个实体的验证错误信息,可见SaveChanges方法执行保存之前是调用了GetValidationResults验证实体的方法的。当然,同样可以禁用验证实体的方法,只需要在上下文的构造函数里加上一句:

Configuration.ValidateOnSaveEnabled = false;  //调用SaveChanges方法的时候不验证实体

再运行上面的方法会打印出:Save Succeeded. 禁止验证也超级有用,后续章节会陆续讲解。

五、本文源码和系列文章导航

ok,本文结束,感谢阅读。如果觉得本文还可以,希望不啬点下【推荐】,谢谢!本文源码

EF DbContext 系列文章导航

  1. EF如何操作内存中的数据和加载外键数据:延迟加载、贪婪加载、显示加载  本章源码
  2. EF里单个实体的增查改删以及主从表关联数据的各种增删改查  本章源码
  3. 使用EF自带的EntityState枚举和自定义枚举实现单个和多个实体的增删改查  本章源码
  4. EF里查看/修改实体的当前值、原始值和数据库值以及重写SaveChanges方法记录实体状态  本章源码
  5. EF里如何定制实体的验证规则和实现IObjectWithState接口进行验证以及多个实体的同时验证  本章源码
  6. 重写ValidateEntity虚方法实现可控的上下文验证和自定义验证  本章源码

EF里如何定制实体的验证规则和实现IObjectWithState接口进行验证以及多个实体的同时验证的更多相关文章

  1. EF里查看/修改实体的当前值、原始值和数据库值以及重写SaveChanges方法记录实体状态

    本文目录 查看实体当前.原始和数据库值:DbEntityEntry 查看实体的某个属性值:GetValue<TValue>方法 拷贝DbPropertyValues到实体:ToObject ...

  2. ThinkPhp5.0模型验证规则

    Tp5提供了模型数据规则的验证功能,用于在数据save或者update前验证数据的有效性.Tp5提供校验规则的类为\Think\Validate,默认提供的校验规则可以查看该文件. 在Model文件中 ...

  3. [Asp.net MVC]Asp.net MVC5系列——在模型中添加验证规则

    目录 概述 在模型中添加验证规则 自定义验证规则 伙伴类的使用 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5 ...

  4. Salesforce的公式和验证规则

    公式 在Salesforce中,有些功能不需要从数据库中直接读取的数据,而是基于这些数据之间的关系来做出判断.这种情况下就要用到"公式"功能. 公式的概念和Excel中的公式类似, ...

  5. 把多种验证规则用到一个model上

    基于标记特性的Model验证,真的太棒了,与jquery validate结合后激情四射,有木有,一句话完成前后端验证.简直让人秒爱... 但是爱是爱了,生活中总会有些小摩擦,这不问题来了:看图中那个 ...

  6. Asp.net MVC验证哪些事(2)-- 验证规则总结以及使用

    上篇文章Asp.net MVC验证那些事(1)-- 介绍和验证规则使用中,介绍了Asp.net MVC中的验证功能以及如何使用.这里将对MVC中内置的验证规则进行总结. 一,查找所有验证规则 上篇文章 ...

  7. EF里单个实体的增查改删以及主从表关联数据的各种增删 改查

    本文目录 EF对单个实体的增查改删 增加单个实体 查询单个实体 修改单个实体 删除单个实体 EF里主从表关联数据的各种增删改查 增加(增加从表数据.增加主从表数据) 查询(根据主表找从表数据.根据从表 ...

  8. 2016/05/15 ThinkPHP3.2.2 表单自动验证实例 验证规则的数组 直接写在相应的控制器里

    使用TP 3.2框架 验证规则也可以写到模型里,但感觉有些麻烦, 一是有时候不同页面验证的方式会不一样, 二是看到这个   Add  事件里的代码,就清楚要接收什么数据,如何验证数据能够在第一眼有个大 ...

  9. EF里Guid类型数据的自增长、时间戳和复杂类型的用法

    通过前两章Lodging和Destination类的演示,大家肯定基本了解Code First是怎么玩的了,本章继续演示一些很实用的东西.文章的开头提示下:提供的demo为了后面演示效果,前面代码有些 ...

随机推荐

  1. 随笔jade

    mixin在刚使用的时候写错,写成了minxin,然后进行命令生成,发现报错 查了蛮久,由于开发工具并没有提示错误,最后找到了这样的错误,记下来,望大家不要重复爬坑

  2. Android开发学习之路-自定义控件(天气趋势折线图)

    之前写了个天气APP,带4天预报和5天历史信息.所以想着要不要加一个折线图来显示一下天气变化趋势,难得有空,就写了一下,这里做些记录,脑袋不好使容易忘事. 先放一下效果: 控件内容比较简单,就是一个普 ...

  3. NLog在Asp.Net MVC的实战应用

    Asp.Net MVC FilterAttribute特性.读取xml反序列化.NLog实战系列文章 首先新建一个MVC project. 一.NLog的配置. 作者:Jarosław Kowalsk ...

  4. SQL 邮件配置篇

    在我们运维工作中,经常要对备份,ETL等作业进行监控,这时我们需要用到SQL SERVER自带的邮件服务器,其原理,我在这么里不多说,直接来实战,下面是我对服务器配置源码,分享给大家,希望对大家有帮助 ...

  5. Redis数据结构详解(一)

    前言 Redis和Memcached最大的区别,Redis 除啦支持数据持久化之外,还支持更多的数据类型而不仅仅是简单key-value结构的数据记录.Redis还支持对这些数据类型做更多的服务端操作 ...

  6. Android自定义控件之基本原理

    前言: 在日常的Android开发中会经常和控件打交道,有时Android提供的控件未必能满足业务的需求,这个时候就需要我们实现自定义一些控件,今天先大致了解一下自定义控件的要求和实现的基本原理. 自 ...

  7. nodejs中流(stream)的理解

    nodejs的fs模块并没有提供一个copy的方法,但我们可以很容易的实现一个,比如: var source = fs.readFileSync('/path/to/source', {encodin ...

  8. jvm系列(一):java类的加载机制

    java类的加载机制 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装 ...

  9. ZKWeb网站框架的动态编译的实现原理

    ZKWeb网站框架是一个自主开发的网页框架,实现了动态插件和自动编译功能. ZKWeb把一个文件夹当成是一个插件,无需使用csproj或xproj等形式的项目文件管理,并且支持修改插件代码后自动重新编 ...

  10. 初谈SQL Server逻辑读、物理读、预读

    前言 本文涉及的内容均不是原创,是记录自己在学习IO.执行计划的过程中学习其他大牛的博客和心得并记录下来,之所以想写下来是为了记录自己在追溯的过程遇到的几个问题,并把这些问题弄清楚. 本章最后已贴出原 ...