前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Entity Framework 索引

Entity Framework 索引

作者头像
喵叔
发布2020-09-08 16:16:05
5070
发布2020-09-08 16:16:05
举报
文章被收录于专栏:喵叔's 专栏喵叔's 专栏

Entity Framwework 6 设置和使用索引,是一个比较 egg 疼的事情,为什么这么说呢?因为Entity Framwework 6的不同版本有不同的设置和使用方法,按照版本来划分,有三种方法:

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

EF6中设置索引比较麻烦,我们需要先进行code first 迁移,然后在迁移类中的 Up 方法中输入如下代码:

代码语言:javascript
复制
//创建索引且值唯一
CreateIndex("dbo.User","Name",unique:true);
//创建复合索引,索引名称为 **NameAndIdNumber**
CreateIndex("dbo.User",new []{"Name","IdNumber"},name:"NameAndIdNumber");

Down 方法中输入如下代码:

代码语言:javascript
复制
DropIndex("dbo.User","Name");
DropIndex("dbo.User",new []{"Name","IdNumber"});

注:EF6中通过迁移类创建的索引无法重命名

EF6.1.x

该版本定义索引的方法如下:

代码语言:javascript
复制
public virtual void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<User>().Property(p => p.Name).HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute()
    {
      IsUnique=true
    }));
}

上面这段代码的意思是,给User表创建一个唯一索引Name。同样上面的代码也可以单独定义在一个类中:

代码语言:javascript
复制
public class UserMap : EntityTypeConfiguration<User>
{
  public UserMap()
  {
      Property(p => p.Name).HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute() {
          IsUnique=true
      }));
  }
}

我们前面知道在EF6中创建的索引无法重命名,那么在EF6.1.x中创建的索引是否可以重命名吗?答案是当然可以,我们只需在前一类中的 UpDown 方法写入如下代码即可:

代码语言:javascript
复制
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 方法即可。

代码语言:javascript
复制
public class UserMap : EntityTypeConfiguration<User>
{
    public UserMap()
    {

        HasIndex(p=>p.Name);
        //创建复合索引
        HasIndex(p=>new {
          Name=p.Name,
          IdNumber=p.IdNumber
        });
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • EF6
  • EF6.1.x
  • EF6.2.x
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档