[C#]Entity Framework(EF6以前)でindexを貼る方法

Entity Framework(EF6以前)でindexを貼ってみました。
Entity FrameworkCore 2.2.6を使っていて、migrationに直接書く方法で作成しました。
下記が手順になります。

Migrationファイルへの記載例

dotnet ef migrations add AddIndex

コマンドでマイグレーションファイルを作成して、下記のようにUpメソッドにCreateIndexメソッドを使ってインデックスを貼るように書きました。
Downメソッドにはマイグレーション実行前に戻す時の処理を書いています(インデックスの削除)

Microsoft.EntityFrameworkCore.Migrations.MigrationBuilderクラスにCreateIndex, DropIndexメソッドが含まれています。

using Microsoft.EntityFrameworkCore.Migrations;

namespace poc_azure_function.Migrations
{
    public partial class AddIndex : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.CreateIndex("idx_messages_on_board_id", "messages", "board_id");
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropIndex("idx_messages_on_board_id");
        }
    }
}

CreateIndexの使い方

 migrationBuilder.CreateIndex("idx_messages_on_board_id", "messages", "board_id");

引数にインデックス名, テーブル名, インデックスカラムを指定しています。

複合インデックスの場合は、今回のサンプルでは試していませんが、こんな感じで文字列の配列でカラム定義して渡します。

migrationBuilder.CreateIndex("idx_users_on_name_email", "users", new string[] { "name", "email" });

DropIndexの使い方

 migrationBuilder.DropIndex("idx_messages_on_board_id");

引数にインデックス名をつけるだけです!

Entity Framework6(EF6)を使う場合(未確認)

Entity Frameworkの6以降では試してないですが、IndexAttributeを使うといいようです。
データ注釈の Code First-EF6

動作確認

マイグレーションを実行して、Azure Data Stadioから確認してみました。

dotnet ef database update

OK!

コメント

タイトルとURLをコピーしました