最近悟出來一個道理,在這兒分享給大家:學歷代表你的過去,能力代表你的現在,學習代表你的將來。
十年河東十年河西,莫欺少年窮
學無止境,精益求精
本篇提供二種方法,希望大家喜歡
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>(); } }
方法二驗證如下:
方法一大家自行驗證
其實大家現在應該明白了,所有的數據驗證我們都是可以自定義的!、
我們可以根據我們的業務需求自定義一套屬於我們的數據驗證容器!
@陳卧龍的博客