7

Есть ли способ для создания индекса в базе данных MS SQL Server с помощью Entity Framework Code First Миграции, если индекс должен быть: Создание индексов с Entity Framework 6 Миграции

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

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

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

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

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

+0

Я нашел дублированный товар. http://stackoverflow.com/questions/25293161/how-can-entity-framework-code-first-create-index-in-descendent-order –

+0

@KimKiWon, спасибо! в то время как мой пост старше, странно, что один получил больше ответов :) они выглядят действительно полезными, поэтому кто-то останавливается, пожалуйста, перейдите по ссылке выше. Одна из проблем заключается в том, что мой вопрос касается также INCLUDE, но я думаю, что предлагаемые там решения могут быть расширены для поддержки INCLUDE. –

ответ

4

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

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