- 实体框架教程
- 实体框架 - 首页
- 实体框架 - 概述
- 实体框架 - 架构
- 实体框架 - 环境设置
- 实体框架 - 数据库设置
- 实体框架 - 数据模型
- 实体框架 - DbContext
- 实体框架 - 数据类型
- 实体框架 - 关系
- 实体框架 - 生命周期
- 实体框架 - 代码优先方法
- 实体框架 - 模型优先方法
- 实体框架 - 数据库优先方法
- 实体框架 - 开发方法
- 实体框架 - 数据库操作
- 实体框架 - 并发
- 实体框架 - 事务
- 实体框架 - 视图
- 实体框架 - 索引
- 实体框架 - 存储过程
- 实体框架 - 脱机实体
- 实体框架 - 表值函数
- 实体框架 - 原生SQL
- 实体框架 - 枚举支持
- 实体框架 - 异步查询
- 实体框架 - 持久化
- 实体框架 - 投影查询
- 实体框架 - 命令日志
- 实体框架 - 命令拦截
- 实体框架 - 空间数据类型
- 实体框架 - 继承
- 实体框架 - 迁移
- 实体框架 - 渴望加载
- 实体框架 - 延迟加载
- 实体框架 - 显式加载
- 实体框架 - 验证
- 实体框架 - 跟踪更改
- 实体框架 - 彩色实体 (Colored Entities - 此处翻译可能需要根据上下文调整,例如"带颜色的实体"或更具体的描述)
- 实体框架 - 代码优先方法
- 实体框架 - 第一个示例
- 实体框架 - 数据注解
- 实体框架 - Fluent API
- 实体框架 - 数据库填充
- 实体框架 - 代码优先迁移
- 实体框架 - 多个DbContext
- 实体框架 - 嵌套实体类型
- 实体框架资源
- 实体框架 - 快速指南
- 实体框架 - 有用资源
- 实体框架 - 讨论
实体框架 - 验证
本章我们将学习如何在 ADO.NET Entity Framework 中使用验证技术来验证模型数据。实体框架提供了多种验证功能,可以实现到用户界面中进行客户端验证,也可以用于服务器端验证。
在实体框架中,数据验证是应用程序中捕获不良数据解决方案的一部分。
实体框架默认情况下会在将所有数据写入数据库之前对其进行验证,使用各种数据验证方法。
但是,实体框架在用户界面数据验证之后。因此,在这种情况下,需要实体验证来处理 EF 抛出的任何异常并显示通用消息。
有一些数据验证技术可以改进错误检查以及如何将错误消息传递回用户。
DbContext 有一个可重写的方法,称为 ValidateEntity。当您调用 SaveChanges 时,实体框架将为其状态不是 Unchanged 的缓存中的每个实体调用此方法。您可以像以下 Student 实体示例中所示那样直接在此处放置验证逻辑。
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
我们建议您逐步执行上述示例,以便更好地理解。
广告