为 Entity Framework 代码优先应用程序添加索引的正确方法?
The right way to add indexes for Entity Framework code-first applications?
我一直在研究如何在列上添加索引,当您使用 Entity Framework 代码优先时。
据我所知,有以下三种方法:
- 将它们添加到实际迁移中(EF 4.2 之后)
- 使用 EF 6.1
中的新 IndexAttribute
- 直接给列添加索引
我不太喜欢这两种方法,因为:
1: 好像挺冒险的。有时您可能想重置所有迁移并再次进行 "Initial setup" 。那么你的索引可能会被删除。
另外我觉得透明度很低,隐藏的很好。
2: 似乎是相当新且有限的文档。不确定效果如何?
3:如果重新创建数据库会很危险。
所以我的问题是:如何在 Entity Framework 代码优先中添加索引?
在迁移中手动添加代码是可以的,但我不推荐这样做。无论如何你仍然需要更新你的模型所以正确地迁移
是什么让您认为这是新的且未记录的?这绝对没有错。
绝对不要这样做。应该避免手动清理数据库的诱惑。
你没有提到这个,但是你也可以使用流畅的语法,像这样:
modelBuilder
.Entity<Company>()
.Property(t => t.Name)
.HasColumnAnnotation(
"Index",
new IndexAnnotation(new IndexAttribute("IX_Company_Name")
{
IsUnique = true
}));
我一直在研究如何在列上添加索引,当您使用 Entity Framework 代码优先时。
据我所知,有以下三种方法:
- 将它们添加到实际迁移中(EF 4.2 之后)
- 使用 EF 6.1 中的新
- 直接给列添加索引
IndexAttribute
我不太喜欢这两种方法,因为:
1: 好像挺冒险的。有时您可能想重置所有迁移并再次进行 "Initial setup" 。那么你的索引可能会被删除。
另外我觉得透明度很低,隐藏的很好。
2: 似乎是相当新且有限的文档。不确定效果如何?
3:如果重新创建数据库会很危险。
所以我的问题是:如何在 Entity Framework 代码优先中添加索引?
在迁移中手动添加代码是可以的,但我不推荐这样做。无论如何你仍然需要更新你的模型所以正确地迁移
是什么让您认为这是新的且未记录的?这绝对没有错。
绝对不要这样做。应该避免手动清理数据库的诱惑。
你没有提到这个,但是你也可以使用流畅的语法,像这样:
modelBuilder .Entity<Company>() .Property(t => t.Name) .HasColumnAnnotation( "Index", new IndexAnnotation(new IndexAttribute("IX_Company_Name") { IsUnique = true }));