MVC+EF 自定義驗證

   1、自定義驗證屬性,利用數據驗證和註解來完成唯一性驗證。

   假設我們有如下表:

    public class Student
    {
        [Key]
        public int Id { get; set; }
        [Required]
        [StringLength(10)]
        public string Name { get; set; }//姓名
        [StringLength(2)]
        public string Sex { get; set; }//性別

        [StringLength(18)]
        public string StudentNum { get; set; }//學號

        [StringLength(100)]
        public string StudentAddress { get; set; }//地址
    }

   現在我們使 學號 字段唯一,不允許重複

   我們創建如下驗證過濾器

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Http.Filters;
using EF_Test.DAL;

namespace EF_Test.Attribute
{
    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
    public class UniqueAttribute :   ValidationAttribute
    {
        public override Boolean IsValid(Object value)
        {
            //校驗數據庫是否存在當前Key
            if (value != null)
            {
                return check(value);
            }
            return false;
        }

        private bool check(object o)
        {
            using (StudentContext db = new StudentContext())
            {
                return db.Students.Where(item => item.StudentNum == o.ToString()).Count() <= 0;
            }
        }
    }
}

   根據上述方法check()來判斷學號是否唯一

   最後我們對學號字段作如下修改:

        [Unique(ErrorMessage="學號不允許重複")]
        [StringLength(18)]
        public string StudentNum { get; set; }//學號

   方法2、

   在XXXInitializer類中的Seed()方法中添加數據庫唯一性驗證語句

         protected override void Seed(StudentContext context)
        {
            context.Database.ExecuteSqlCommand("CREATE UNIQUE INDEX IX_Category_Title ON Student (StudentNum)");//添加數據庫唯一系驗證 Student數據表   StudentNum 字段
        }

   在DBcontext中添加引用:

    public class StudentContext : DbContext
    {
        public StudentContext()
            : base("StudentContext")//指定連接字符串
        {
            Database.SetInitializer<StudentContext>(new StudentInitializer());
        }
        public DbSet<Student> Students { get; set; }
        public DbSet<Course> Courses { get; set; }
        public DbSet<Score> Scores { get; set; }

        /// <summary>
        /// OnModelCreating方法中的modelBuilder.Conventions.Remove語句禁止表名稱正在多元化。如果你不這樣做,所生成的表將命名爲Students、Courses和Enrollments。相反,表名稱將是Student、Course和Enrollment。開發商不同意關於表名稱應該多數。本教程使用的是單數形式,但重要的一點是,您可以選擇哪個你更喜歡通過包括或省略這行代碼的形式。
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
    }

   方法二驗證如下:   

   

   方法一大家自行驗證

   其實大家現在應該明白了,所有的數據驗證我們都是可以自定義的!、

   我們可以根據我們的業務需求自定義一套屬於我們的數據驗證容器!

   @陳臥龍的博客

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