C# 为实体框架代码优先应用程序添加索引的正确方法?

C# 为实体框架代码优先应用程序添加索引的正确方法?,c#,entity-framework,entity-framework-6.1,C#,Entity Framework,Entity Framework 6.1,当您首先使用实体框架代码时,我一直在研究如何在列上添加索引 在我看来,有三种方法: 在实际迁移中添加它们(在EF 4.2之后) 使用EF 6.1中新的索引属性 直接向列添加索引 我不太喜欢这两种方法,因为: 1:似乎风险很大。有时,您可能需要重置所有迁移并再次进行“初始设置”。然后您的索引可能会被删除 此外,我认为它的透明度很低,而且隐藏得很好 2:似乎是非常新且有限的文档。不知道这个效果如何 3:如果重新创建数据库,则会很危险 所以我的问题是:如何首先在实体框架代码中添加索引 在迁移中手动添加

当您首先使用实体框架代码时,我一直在研究如何在列上添加索引

在我看来,有三种方法:

  • 在实际迁移中添加它们(在EF 4.2之后)
  • 使用EF 6.1中新的
    索引属性
  • 直接向列添加索引
  • 我不太喜欢这两种方法,因为:

    1:似乎风险很大。有时,您可能需要重置所有迁移并再次进行“初始设置”。然后您的索引可能会被删除

    此外,我认为它的透明度很低,而且隐藏得很好

    2:似乎是非常新且有限的文档。不知道这个效果如何

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

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

  • 在迁移中手动添加代码是可以的,但我不建议这样做。无论如何,您仍然需要更新您的模型,所以要正确地进行迁移

  • 是什么让你认为这是新的和未记录的?这绝对没什么错

  • 绝对不要这样做。应该避免手动隐藏数据库的诱惑

  • 您没有提到这一点,但您也可以使用流畅的语法,如:

    modelBuilder 
        .Entity<Company>() 
        .Property(t => t.Name) 
        .HasColumnAnnotation( 
            "Index",  
            new IndexAnnotation(new IndexAttribute("IX_Company_Name")
            {
                IsUnique = true 
            }));
    
    modelBuilder
    .实体()
    .Property(t=>t.Name)
    .HasColumnAnnotation(
    “索引”,
    新指数说明(新指数属性(“IX_公司名称”)
    {
    IsUnique=true
    }));