EntityFramework本身提供了非常方便的数据验证特性,以支持用户交互过程中输入项错误时的友好提示。其实业务逻辑层的开发同样离不开这个特性。就拿登录之个典型场景来说,首先定义出用户实体模型,假设对用户名的长度增加了一个约束,那么登录界面上输入了超出长度的用户名是可以马上显示错误提示的,但登录的方法本身也需要再次校验用户名合法性的,不需要另外编码,EntityFramework在SaveChanges的时候会自动进行校验的,这个时候需要捕获DbEntityValidationException异常并取得之前与UI一致的ErrorMessage。
具体看另一个简单的示例:
public class Author { public int Id { get; set; } [MaxLength(10, ErrorMessage = "OUT OF RANGE")] public string Name { get; set; } } public class Blog : DbContext { public DbSet<Author> Authors { get; set; } }
用一个控制台应用程序来模拟
string error = string.Empty; using (var blog = new Blog()) { Author author = new Author { Name = "ErrorNameForTest" }; blog.Authors.Add(author); try { blog.SaveChanges(); } catch (DbEntityValidationException ex) { foreach (var item in ex.EntityValidationErrors) { foreach (var item2 in item.ValidationErrors) { error = string.Format("{0}:{1}\r\n", item2.PropertyName, item2.ErrorMessage); } } } } return error;