• 索引
    • 惯例
    • 数据注解
    • 流式 API

    索引

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

    惯例

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

    数据注解

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

    流式 API

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

    1. class MyContext : DbContext
    2. {
    3. public DbSet<Blog> Blogs { get; set; }
    4. protected override void OnModelCreating(ModelBuilder modelBuilder)
    5. {
    6. modelBuilder.Entity<Blog>()
    7. .HasIndex(b => b.Url);
    8. }
    9. }
    10. public class Blog
    11. {
    12. public int BlogId { get; set; }
    13. public string Url { get; set; }
    14. }

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

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

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

    1. class MyContext : DbContext
    2. {
    3. public DbSet<Person> People { get; set; }
    4. protected override void OnModelCreating(ModelBuilder modelBuilder)
    5. {
    6. modelBuilder.Entity<Person>()
    7. .HasIndex(p => new { p.FirstName, p.LastName });
    8. }
    9. }
    10. public class Person
    11. {
    12. public int PersonId { get; set; }
    13. public string FirstName { get; set; }
    14. public string LastName { get; set; }
    15. }

    提示

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