为 Entity Framework 代码优先应用程序添加索引的正确方法?

The right way to add indexes for Entity Framework code-first applications?

我一直在研究如何在列上添加索引,当您使用 Entity Framework 代码优先时。

据我所知,有以下三种方法:

  1. 将它们添加到实际迁移中(EF 4.2 之后)
  2. 使用 EF 6.1
  3. 中的新 IndexAttribute
  4. 直接给列添加索引

我不太喜欢这两种方法,因为:

1: 好像挺冒险的。有时您可能想重置所有迁移并再次进行 "Initial setup" 。那么你的索引可能会被删除。

另外我觉得透明度很低,隐藏的很好。

2: 似乎是相当新且有限的文档。不确定效果如何?

3:如果重新创建数据库会很危险。

所以我的问题是:如何在 Entity Framework 代码优先中添加索引?

  1. 在迁移中手动添加代码是可以的,但我不推荐这样做。无论如何你仍然需要更新你的模型所以正确地迁移

  2. 是什么让您认为这是新的且未记录的?这绝对没有错。

  3. 绝对不要这样做。应该避免手动清理数据库的诱惑。

  4. 你没有提到这个,但是你也可以使用流畅的语法,像这样:

    modelBuilder 
        .Entity<Company>() 
        .Property(t => t.Name) 
        .HasColumnAnnotation( 
            "Index",  
            new IndexAnnotation(new IndexAttribute("IX_Company_Name")
            {
                IsUnique = true 
            }));