在本章中,让我们了解可以在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
在上面的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
我们建议您逐步执行上述示例,以便更好地理解.