Entity Framework 索引

Entity Framwework 6 設置和使用索引,是一個比較 egg 疼的事情,爲何這麼說呢?由於Entity Framwework 6的不一樣版本有不一樣的設置和使用方法,按照版原本劃分,有三種方法:ide

  1. EF6 方法
  2. EF6.1.x方法
  3. EF6.2.x方法

EF6

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中經過遷移類建立的索引沒法重命名

EF6.1.x

該版本定義索引的方法以下:索引

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中建立的索引是否能夠重命名嗎?答案是固然能夠,咱們只需在前一類中的 UpDown 方法寫入以下代碼便可: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

在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
        });
    }
}
相關文章
相關標籤/搜索