开发手册 欢迎您!
软件开发者资料库

Entity Framework - 验证

Entity Framework验证 - 从概述,体系结构,环境设置,数据库设置,数据模型,DbContext,类型,关系,生命周期,代码优先方法,模型优先方法,数据库优先方法,DEV方法,数据库操作,并发,学习实体框架事务,视图,索引,存储过程,断开连接的实体,表值函数,本机SQL,枚举支持,异步查询,持久性,投影查询,命令记录,命令拦截,空间数据类型,继承,迁移,渴望,懒惰,显式加载,验证,跟踪更改,彩色实体,第一个示例,数据注释,Fluent API,种子数据库,代码优先迁移,多个DbContext,嵌套实体类型。

在本章中,让我们了解可以在ADO.NET Entity Framework中用于验证模型数据的验证技术.实体框架提供了各种各样的验证功能,可以实现到用户界面以进行客户端验证,也可以用于服务器端验证.

  • 在Entity Framework中,数据验证是在应用程序中捕获错误数据的解决方案的一部分.

  • 实体框架验证所有数据默认情况下,使用各种数据验证方法将其写入数据库之前.

  • 但是,实体框架是在用户界面数据验证之后.因此,在这种情况下,需要实体验证来处理EF抛出并显示通用消息的任何异常.

  • 有一些数据验证技术改进错误检查以及如何将错误消息传回给用户.

DbContext有一个名为ValidateEntity的Overridable方法.当您调用SaveChanges时,Entity Framework将为其缓存状态不是Unchanged的每个实体调用此方法.您可以将验证逻辑直接放在此处,如以下示例所示为学生实体.

public partial class UniContextEntities : DbContext {   protected override System.Data.Entity.Validation      .DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry,       System.Collections.Generic.IDictionary items) {         if (entityEntry.Entity is Student) {            if (entityEntry.CurrentValues.GetValue("FirstMidName") == "") {               var list = new List();               list.Add(new System.Data.Entity.Validation                  .DbValidationError("FirstMidName", "FirstMidName is required"));               return new System.Data.Entity.Validation                  .DbEntityValidationResult(entityEntry, list);            }         }         if (entityEntry.CurrentValues.GetValue("LastName") == "") {            var list = new List();            list.Add(new System.Data.Entity.Validation               .DbValidationError("LastName", "LastName is required"));            return new System.Data.Entity.Validation               .DbEntityValidationResult(entityEntry, list);         }         return base.ValidateEntity(entityEntry, items);   }}

在上面的ValidateEntity方法中,如果这些属性中的任何一个属性为空,则检查Student实体FirstMidName和LastName属性字符串,然后它将返回一条错误消息.

让我们看一个创建新学生的简单示例,但学生的FirstMidName是空字符串,如下面的代码所示.

class Program {   static void Main(string[] args) {      using (var context = new UniContextEntities()) {         Console.WriteLine("Adding new Student to the database");         Console.WriteLine();         try {            context.Students.Add(new Student() {               FirstMidName = "",               LastName = "Upston"            });            context.SaveChanges();         } catch (DbEntityValidationException dbValidationEx) {            foreach (DbEntityValidationResult entityErr in                dbValidationEx.EntityValidationErrors) {               foreach (DbValidationError error in entityErr.ValidationErrors) {                  Console.WriteLine("Error: {0}",error.ErrorMessage);               }            }         }         Console.ReadKey();      }   }}

编译并执行上述示例时,您将收到以下错误消息:控制台窗口.

Adding new Student to the database  Error: FirstMidName is required

我们建议您逐步执行上述示例,以便更好地理解.