Entity Framwework 6 設置和使用索引,是一個比較 egg 疼的事情,爲何這麼說呢?由於Entity Framwework 6的不一樣版本有不一樣的設置和使用方法,按照版原本劃分,有三種方法:ide
EF6中設置索引比較麻煩,咱們須要先進行code first 遷移,而後在遷移類中的 Up 方法中輸入以下代碼:ui
//建立索引且值惟一 CreateIndex("dbo.User","Name",unique:true); //建立複合索引,索引名稱爲 **NameAndIdNumber** CreateIndex("dbo.User",new []{"Name","IdNumber"},name:"NameAndIdNumber");
在 Down 方法中輸入以下代碼:code
DropIndex("dbo.User","Name"); DropIndex("dbo.User",new []{"Name","IdNumber"});
注:EF6中經過遷移類建立的索引沒法重命名
該版本定義索引的方法以下:索引
public virtual void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<User>().Property(p => p.Name).HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute() { IsUnique=true })); }
上面這段代碼的意思是,給User表建立一個惟一索引Name。一樣上面的代碼也能夠單獨定義在一個類中:it
public class UserMap : EntityTypeConfiguration<User> { public UserMap() { Property(p => p.Name).HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute() { IsUnique=true })); } }
咱們前面知道在EF6中建立的索引沒法重命名,那麼在EF6.1.x中建立的索引是否能夠重命名嗎?答案是固然能夠,咱們只需在前一類中的 Up 和 Down 方法寫入以下代碼便可:io
public override void Up() { RenameIndex(table:"db.User",name:"Name",newName:"NameIndex"); } public override void Down() { RenameIndex(table:"db.User",name:"NameIndex",newName:"Name"); }
在EF6.2.X中建立索引比較簡單,只須要調用 HasIndex 方法便可。table
public class UserMap : EntityTypeConfiguration<User> { public UserMap() { HasIndex(p=>p.Name); //建立複合索引 HasIndex(p=>new { Name=p.Name, IdNumber=p.IdNumber }); } }