EF DataBase First生成model的驗證


如何避免在EF自動生成的model中的DataAnnotation被覆蓋掉

相信很多人剛接觸EF+MVC的時候,DataBase First模式生成model類中加驗證信息的時候,會在重新生成model的時候被重寫掉。
這里介紹一個方法:
比如我有個Book類是從數據庫中生成到model中的,我們可以在Models文件夾中創建一個局部類名稱與Book類同名(注意:該類的命名空間必須與自動生
成的類屬於同一個命名空間),類內容為空的就可以,然后在新建的部分類下方再創建一個類(BookMetaData),類中中加上我們需要驗證的列與驗證信
息,然后需要將
[MetadataType(typeof(BookMetaData))]加在新建的Book類名上方
這時我們在view頁面中不用更改代碼。這樣當我們重新生成model的時候,我們自己定義的部分類Book就不會受影響了。

解決方案:

說明:Model1.edmx是ef生成的,Book.cs是我額外添加的,代碼在如下

Model代碼:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.ComponentModel.DataAnnotations;
 6 
 7 namespace Web.Models
 8 {
 9     [MetadataType(typeof(BookMetadata))]
10     public partial class Book
11     {
12         class BookMetadata
13         {
14             [Display(Name = "名稱")]
15             [Required(ErrorMessage = "名稱不能為空")]
16 public string name { get; set; } 17 18 [Required(ErrorMessage = "價格不能為空")] 19 [Range(5, 100, ErrorMessage = "價格5-100之間")] 20 public decimal price { get; set; } 21 22 public decimal time { get; set; } 23 } 24 } 25 }

控制器代碼:

Controllers中BookController.cs的Add方法代碼如下

public ActionResult Add()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Add(Book model)
        {
            if (ModelState.IsValid)
            {
                db.Book.AddObject(model);
                int res = db.SaveChanges();
                ViewData["status"] = "成功:" + DateTime.Now.ToString();
            }
            else {
                ViewData["status"] = "失敗:" + DateTime.Now.ToString();
            }
            return View();
        }

運行效果截圖:

測試環境:VS2010+.Net4.0+MVC4+EF4


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM