Создание индексов с помощью Entity Framework 6 Миграции

ef-code-first entity-framework entity-framework-6 indexing sql-server-2012

Вопрос

Есть ли способ создать индекс в базе данных MS SQL Server с использованием First Migrations Entity Framework Code, если индекс должен быть:

  • по крайней мере один столбец
  • включая другие столбцы
?

Он должен произвести что-то вроде этого:

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

Я нашел статью по этой теме, но она предлагает довольно громоздкое решение. Возможно, что-то улучшилось с момента написания статьи.

Я также знаю о возможности заставить мой перенос выполнить произвольный код SQL, но я действительно хочу, чтобы иметь возможность использовать некоторую версию метода CreateIndex которая делает все грязные работы для меня, вместо того, чтобы самостоятельно писать код SQL.

Популярные ответы

Я просто столкнулся с одной и той же проблемой, и, похоже, сейчас она не является частью 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");
}

Это некрасиво, можно убрать в многоразовый метод / расширение и т. Д., Но он выполняет эту работу.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему