• Entity Framework 索引


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

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

    EF6

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

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

    Down 方法中输入如下代码:

    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。同样上面的代码也可以单独定义在一个类中:

    public class UserMap : EntityTypeConfiguration<User>
    {
      public UserMap()
      {
          Property(p => p.Name).HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute() {
              IsUnique=true
          }));
      }
    }
    

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

    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 方法即可。

    public class UserMap : EntityTypeConfiguration<User>
    {
        public UserMap()
        {
    
            HasIndex(p=>p.Name);
            //创建复合索引
            HasIndex(p=>new {
              Name=p.Name,
              IdNumber=p.IdNumber
            });
        }
    }
    
  • 相关阅读:
    禁用生成8.3字符长文件名解决单目录存储大量文件写入性能下降问题
    遭遇EventSystem服务问题
    软件工程师遭遇硬件故障RAID5两块硬盘离线
    Pocket Player睡眠定时器不能选择问题的解决办法
    借助RamDisk让你的FireFox飞起来
    NVS4200M显卡“超频”
    Python数据类型
    Python变量
    端口及对应服务
    Python基础(1)
  • 原文地址:https://www.cnblogs.com/gangzhucoll/p/12778205.html
Copyright © 2020-2023  润新知