使用Entity Framework 6迁移创建索引

10

如果需要创建一个至少按一个列降序排列且包括其他列的索引,是否有一种方法可以使用Entity Framework Code First Migrations在MS SQL Server数据库中创建?

它必须生成类似于此的内容:

CREATE NONCLUSTERED INDEX [IX_IndexName] ON [dbo].[TableName]
(
    [Column1] ASC,
    [Column2] DESC
)
INCLUDE ([Column3], [Column4])

我发现了一篇文章,讲解了这个问题,但提供的解决方案相当繁琐。也许自那篇文章以来已经有所改进。

我还知道可以使我的迁移执行任意SQL代码的能力,但我真的想使用某个版本的CreateIndex方法,它可以为我完成所有的麻烦工作,而不是自己编写SQL代码。


我发现了重复的文章。https://dev59.com/doLba4cB1Zd3GeqPe3Uc - Kim Ki Won
@KimKiWon,谢谢!虽然我的帖子比较旧,但奇怪的是那个帖子收到了更多的回答 :) 它们看起来确实有用,所以任何路过的人请点击上面的链接。不过有一个问题是,我的问题也涉及到INCLUDE,但我认为那里提供的解决方案也可以扩展支持INCLUDE。 - Michael Sagalovich
1个回答

6

我刚遇到了同样的问题,目前似乎不是迁移API的一部分。我的解决方法只是执行上游迁移的sql,并在下游迁移中使用DropIndex方法。

public override void Up()
{
    Sql("CREATE NONCLUSTERED INDEX IX_IndexName ON TableName ([Column1], [Column2] DESC) INCLUDE ([Column3], [Column4])");
}

public override void Down()
{
    DropIndex("TableName", "IX_IndexName");
}

虽然不太美观,但可以整理成可重复使用的方法/扩展等,它能完成任务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接