7

有沒有一種方法來創建一個使用實體框架的Code First遷移的MS SQL Server數據庫的索引,如果該索引必須是: 與實體框架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

我剛剛遇到同樣的問題,它似乎目前不屬於migrations 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"); 
} 

這不是很漂亮,可以整理成一個可重用的方法/擴展等,但它的工作。