楽しい人生

紙 おいしいな〜!

ASP.NET Core MVC における DB の自動 Migration 実行

tl;dr

Startup.csConfigure メソッド内で IdentityDbContext 継承クラスインスタンス contextcontext.Database.Migrate() メソッドを呼ぶ

背景・動機

ASP.NET Core MVC アプリケーションにおいて、起動時に自動で Migration を実行して欲しい

方法

前提として、Entity Framework Core のを利用しているものとします。

まずは Migration を実行するためのクラスを Data/MigrationInitializer.cs に作成します。

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace AppName.Data
{
    public class MigrationInitializer
    {
        public static async void Initialize(IServiceProvider serviceProvider)
        {
            using (var context = new ApplicationDbContext(
                serviceProvider.GetRequiredService<DbContextOptions<ApplicationDbContext>>()))
            {
                await context.Database.MigrateAsync();
            }
        }
    }
}

次に、Startup.cs 内の Configure メソッドの最後に以下のコードを追記します。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    // 中略
    MigrationInitializer.Initialize(app.ApplicationServices);
}

これで、アプリケーション起動時に Migration が自動で実行される様になります。