EF6でコードからMigrationするときにログする方法


概要

EF6でコードからMigrationするときに、Migrationの実行内容を見たいときがあります。
その方法です。

やること

1. MigrationsLoggerを継承したロギングクラスを作成します。以下はConsoleに出力する例です。

MyLogger.cs
    public class MyLogger : System.Data.Entity.Migrations.Infrastructure.MigrationsLogger
    {
        public override void Info(string message)
        {
            System.Console.WriteLine($"[Info]{message}");
        }

        public override void Verbose(string message)
        {
            System.Console.WriteLine($"[Verb]{message}");
        }

        public override void Warning(string message)
        {
            System.Console.WriteLine($"[Warn]{message}");
        }
    }

2. MigrationLoggingDecoratorを生成してUpdate()します。

Program.cs

        static void Main(string[] args)
        {
            var configuration = new Configuration(); // Enable-Migrationsで自動生成されたクラス
            var migrator = new System.Data.Entity.Migrations.DbMigrator(configuration)
            MigratorLoggingDecorator logger = new System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator(migrator, new MyLogger());
            logger.Update();
            :
            :

参考URL