11

メッセージが作成された時のタイムスタンプ属性がMessageModelです。この長い属性でクラスタード・インデックスを作成したいと思います。特定のタイムスタンプより新しいすべてのメッセージを取得するためにクエリを実行するときに、クエリのスピードアップを実現したいと考えています。タイムスタンプ値は、作成後に決して変更されません。私は現在、Id属性の通常のインデックスを持っています。エンティティフレームワークとSQL Serverでコードファースト移行を使用するときにクラスタ化インデックスを作成する方法

ASP.NET MVC 4.5でEntity Frameworkコードファーストマイグレーションを使用してモデル属性にクラスタードインデックスを追加するにはどうすればよいですか?

答えて

24

UPDATE:EntityFramework 6.1は、任意のフィールドのインデックスを指定するために使用できる[Index]属性を導入しました。例:

残念ながらEF doesn't really provide much support for indexes

public class MessageModel 
{ 
    [Index(IsClustered = true, IsUnique = false)] 
    public long Timestamp { get; set; } 
} 

Entity Frameworkの古いバージョンのために、私は以下の私のオリジナルの答えを残します。これにアプローチする最善の方法は、実行している移行の種類によって異なります。自動移行を使用しておらず、新しいテーブル(つまり、移行対象のテーブル)にインデックスを追加する場合は、移行で生成されたCreateTableステートメントを変更してインデックスを追加できます。移行を生成する - あなた自動マイグレーションを使用している(またはテーブルがすでに存在している)場合は、この技術は、あなたはまだあなたのインデックスを作成するために、古いスタイルのSQLを使用することができます

(それを見つけるためにインデックスを検索)one of the Entity Framework tutorialsに使用されています普通の古いCREATE INDEX文を含むようにコードを修正してください。

+0

ありがとう、リチャード。あなたは基本的に私が恐れ始めたものに答えましたが、CREATE INDEXを呼び出してそこから取得することができますね。 – Sindre

+2

この機能はEntity Framework 6.1に追加されました。 – Richard

関連する問題