- 实体框架教程
- 实体框架 - 主页
- 实体框架 - 概述
- 实体框架 - 架构
- 实体 F - 环境设置
- 实体框架 - 数据库设置
- 实体框架 - 数据模型
- 实体框架-DbContext
- 实体框架 - 类型
- 实体框架 - 关系
- 实体框架 - 生命周期
- 实体 F - 代码优先方法
- 实体 F - 模型优先方法
- 实体 F - 数据库优先方法
- 实体框架 - DEV 方法
- 实体F——数据库操作
- 实体框架 - 并发
- 实体框架 - 事务
- 实体框架 - 视图
- 实体框架 - 索引
- 实体 F - 存储过程
- 实体 F - 断开连接的实体
- 实体 F - 表值函数
- 实体框架 - 本机 SQL
- 实体框架 - 枚举支持
- 实体F - 异步查询
- 实体框架 - 持久性
- 实体 F - 投影查询
- 实体 F - 命令记录
- 实体F——命令拦截
- 实体框架 - 空间数据类型
- 实体框架 - 继承
- 实体框架 - 迁移
- 实体框架 - 预加载
- 实体框架 - 延迟加载
- 实体框架 - 显式加载
- 实体框架 - 验证
- 实体框架 - 跟踪更改
- 实体框架 - 彩色实体
- 实体 F - 代码优先方法
- 实体框架 - 第一个示例
- 实体框架 - 数据注释
- 实体框架 - 流畅的 API
- 实体框架-种子数据库
- 实体 F - 代码优先迁移
- 实体 F - 多个 DbContext
- 实体 F - 嵌套实体类型
- 实体框架资源
- 实体框架 - 快速指南
- 实体框架 - 有用的资源
- 实体框架 - 讨论
实体框架 - 验证
在本章中,我们将了解可在 ADO.NET 实体框架中用于验证模型数据的验证技术。实体框架提供了各种各样的验证功能,这些功能可以实现到用户界面以进行客户端验证,也可以用于服务器端验证。
在实体框架中,数据验证是捕获应用程序中不良数据的解决方案的一部分。
默认情况下,实体框架会使用多种数据验证方法在将所有数据写入数据库之前对其进行验证。
然而,实体框架出现在用户界面数据验证之后。因此,在这种情况下,需要进行实体验证来处理 EF 引发的任何异常并显示通用消息。
有一些数据验证技术可以改进错误检查以及如何将错误消息传递回用户。
DbContext 有一个名为 ValidateEntity 的可重写方法。当您调用 SaveChanges 时,实体框架将为其缓存中状态不为 Unchanged 的每个实体调用此方法。您可以将验证逻辑直接放入此处,如以下学生实体示例所示。
public partial class UniContextEntities : DbContext { protected override System.Data.Entity.Validation .DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry, System.Collections.Generic.IDictionary<object, object> items) { if (entityEntry.Entity is Student) { if (entityEntry.CurrentValues.GetValue<string>("FirstMidName") == "") { var list = new List<System.Data.Entity .Validation.DbValidationError>(); 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<string>("LastName") == "") { var list = new List<System.Data.Entity .Validation.DbValidationError>(); 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
我们建议您逐步执行上述示例,以便更好地理解。