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

Lar*_*ard 2 c# entity-framework entity-framework-6.1

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

我认为,有三种方法:

  1. 在实际迁移中添加它们(在EF 4.2之后)
  2. 使用IndexAttributeEF 6.1中的新功能
  3. 直接向列添加索引

我不是很喜欢这两种方法:

1:似乎风险很大.有时您可能希望重置所有迁移并再次进行"初始设置".然后您的索引可能会被删除.

另外我觉得它很透明,隐藏得很好.

2:似乎是相当新的和有限的文档.不知道这有多好用吗?

3:如果重新创建数据库,则会很危险.

所以我的问题是:如何在实体框架代码中首先添加索引?

Dav*_*idG 5

  1. 在迁移中手动添加代码是可以的,但我不推荐它.您仍然需要更新模型,以便正确进行迁移

  2. 是什么让你认为这是新的和无证的?这绝对没有错.

  3. 绝对不要这样做.应避免手动污染数据库的诱惑.

  4. 您没有提到这一点,但您也可以使用流畅的语法,如下所示:

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