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 }); } }