1.4.10 索引

优质
小牛编辑
131浏览
2023-12-01

索引是在大多数数据存储中通用的概念。尽管其在不同的数据存储中的实现可能有所不同,但它们都是用来提高基于数据列(或者数据列集合)的查询效率的。

惯例

按照惯例,每个(或者每一组)被用作外键的属性都会创建对应的索引。

数据注解

不能使用数据注解创建索引。

流式 API

可以使用流式 API 来在单一属性上指定索引。默认情况下,这些不是唯一索引。

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .HasIndex(b => b.Url);
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

还可以将索引指定为唯一索引,这意味在给定的属性上两个实体不会具有相同的值。

        modelBuilder.Entity<Blog>()
            .HasIndex(b => b.Url)
            .IsUnique();

还可以在多个数据列上指定索引。

class MyContext : DbContext
{
    public DbSet<Person> People { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Person>()
            .HasIndex(p => new { p.FirstName, p.LastName });
    }
}

public class Person
{
    public int PersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

提示

每个独立属性组上只能有一个索引。如果你使用流式 API在已定义了索引的属性组上配置索引,不管是惯例定义还是前面所述的配置,那么你就更改了索引的定义。如果你在已按照惯例创建的索引上做更多配置,这会很有用。