让Entity Framework数据库优先也支持自动校验
罗朝辉 (http://kesalin.cnblogs.com/)
本文遵循“署名-非商业用途-保持一致”创作公用协议
ASP.NET MVC 确实比以前的ASP编程模式 VIEW-BLL-DAL三层架构长进了不少,再加上Entity Framework利器,开发Web应用非常容易。要结合这两者,使用 Code First 模式非常好用,这样我们就非常方便在模型的字段上加上许多 System.ComponentModel.DataAnnotations 来对字段进行字段校验。但如果使用 Database First 模式,就稍微有点不那么方便了,但是办法还是有的,使用 partial 类是一种解法。
示例代码演示了 Database First 模式下,使用两个数据模型,在其中使用 partial 类来实现对字段的自动校验,并且将数据模型封装带单独的 dll 中。演示结果如下:
上面 student 和 school 页面的数据来自两个的数据库,而名称长度的校验是在相应的 partial 类字段上加 System.ComponentModel.DataAnnotations 限定实现的。
工程结构如图所示:
演示代码很简单,在这里就只列出 student.cs 的实现:
using System; using System.ComponentModel.DataAnnotations; namespace Student.DAL { public partial class student { [Required] [StringLength(8, ErrorMessage = "{0} 至少应包含6个字符。", MinimumLength = 6)] [Display(Name = "名称")] public string MName { get { return Name; } set { Name = value; } } [Required] [Display(Name = "Age")] public Int64 MAge { get { return Age; } set { Age = value; } } } }
从上面的代码可以看出,partial 类对 EF 自动生成的 Entity 类进行了简单的封装,虽然这样有冗余,但为了能实现自动检验,也就容忍了。不知还有更好的办法没有,前提是不要修改 EF 自动生成的 Entity 类。