Entity framework 通过EntityFramework CodeFirst迁移删除索引

Entity framework 通过EntityFramework CodeFirst迁移删除索引,entity-framework,ef-code-first,entity-framework-migrations,Entity Framework,Ef Code First,Entity Framework Migrations,我们现在使用EntityFramework代码优先迁移。 我们的数据库表和索引是很久以前创建的,在我们使用EntityFramework CodeFirst迁移之前。 我们的表是myTable,有一列vchMyColumnA和索引列a。 自从我们使用EntityFramework CodeFirst迁移以来,我们已经使用EntityFramework CodeFirst迁移将新列添加到myTable中 我们需要删除索引列A 我们是否需要通过EntityFramework CodeFirst迁移来

我们现在使用EntityFramework代码优先迁移。 我们的数据库表和索引是很久以前创建的,在我们使用EntityFramework CodeFirst迁移之前。 我们的表是myTable,有一列vchMyColumnA和索引列a。 自从我们使用EntityFramework CodeFirst迁移以来,我们已经使用EntityFramework CodeFirst迁移将新列添加到myTable中

我们需要删除索引列A

我们是否需要通过EntityFramework CodeFirst迁移来实现这一点,或者我们可以运行一个脚本来删除索引

如果我们需要通过EntityFramework CodeFirst迁移删除索引,我该怎么做?在Package Manager控制台中,我键入add migration DropColumnAIndex,打开迁移代码DropColumnAIndex,并添加了以下代码:

public partial class DropColumnAIndex : DbMigration
{

    public override void Up()
    {
        DropIndex("dbo.myTable", new[] { "ColumnA" });
    }

    public override void Down()
    {
        CreateIndex("dbo.myTable", "vchMyColumnA");
    }
}
然后我输入了更新数据库。 没有错误,我可以在数据库select*from\uu MigrationHistor中看到迁移,但索引列A仍然存在


谢谢。

抱歉,很难在评论中写下这一点。您可以将等效的SQL注入到迁移中:

public override void Up()
{
    Sql("DROP INDEX ColumnA ON [dbo].[myTable];"); 
}

ColumnA是打字错误吗?您的下行代码将其称为vchMyColumnA。我喜欢编写这些问题的脚本,看看产生了什么样的SQL。更新数据库-Script.No,很遗憾,索引名为ColumnA,而列本身名为vchMyColumnA。当我更新database-Script时,它返回以下脚本:如果存在,从sys.indexes中选择name,其中name=N'IX_ColumnA'和object_id=object_idN'[dbo].[myTable]',N'U'在[dbo].[myTable]上删除索引[IX_ColumnA]。如何通过EF CodeFirst迁移将索引列A放到列vchMyColumnA上?我可以运行一个脚本来完成吗?谢谢你,这很有效!非常感谢。我应该在密码里写什么?这个代码还可以吗?CreateIndexdbo.myTable,vchMyColumnA;是的,这将重新添加索引。