asp.net mvc5 DataBase First下model校驗問題(MetadataType使用)

最近學習asp.net mvc5,使用   asp.net mvc5+EF6+AutoFac做個小Demo,其中是先設計的數據庫表,就直接選擇了EF的DataBase First(三種開發模式分別是code first,model first和database first)

新建了一個專門的mode項目用於存放EF生成的model信息,那麼問題來了,在新建的asp.net mvc5項目中同樣有用於數據註解和驗證的model,這兩個model很大一部分會有重合,這就讓人不想再去

在數據交互中手動的對應轉換填充 數據庫model和頁面數據註解驗證model了,這時我們可以把asp.net mvc項目下的model對象轉移到存放到EF生成model信息的項目下。

       

圖1

如圖1,Blog.edmx 本質是一個xml文件, 用來存放解析存儲模型、概念模型以及這兩者之間的映射,其中BLog.tt是一個T4模板文件用於生成其下對應的數據模型對象

當然如果我們直接修改這些model對象的數據驗證屬性也是可以的, 但是當數據庫發生變化時更新模型時這些model對象上的數據校驗屬性就會被覆蓋

那麼這個時候我們可以新建一個model對象通過MetadataType屬性來指定要與數據模型類關聯的元數據類,如圖1所示在Blog.edmx之上有一個Model文件夾用戶存放關聯的元數據類。

MetadataType的使用代碼如下:

 1 using System;
 2 using System.ComponentModel.DataAnnotations;
 3 namespace Blog.Model
 4 {
 5     [MetadataType(typeof(UsersMetaData))]
 6     public partial class Users
 7     {
 8         /// <summary>
 9         /// 新增的一個校驗兩次密碼的屬性
10         /// </summary>
11         [DataType(DataType.Password)]
12         [Display(Name = "確認密碼")]
13         [Compare("Password", ErrorMessage = "密碼和確認密碼不匹配。")]
14         public string ConfirmPassword { get; set; }
15     }
16     public class UsersMetaData
17     {
18 
19         [Display(Name = "用戶名")]
20         [Required(ErrorMessage = ("請輸入{0}!"))]
21         public string UserName { get; set; }
22 
23         [Display(Name = "用戶姓名")]
24         [Required(ErrorMessage = ("請輸入{0}!"))]
25         public string UserRealName { get; set; }
26 
27         [Display(Name = "密碼")]
28         [Required(ErrorMessage = ("請輸入{0}"))]
29         [DataType(DataType.Password)]
30         [StringLength(50, ErrorMessage = "{0}的長度在{2}和{1}之間", MinimumLength = 6)]
31         public string Password { get; set; }
32 
33        
34     }
35 }

 

數據註解和驗證屬性需要引用System.ComponentModel.DataAnnotations命名空間,如此處理後不論是自定義驗證屬性還是新增屬性都是ok,在mvc項目中引用當前項目的引用,就能完成達到我們的目的

這個僅僅屬於一個小技巧,如果是model first或者code first就完全不需要如此了

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章