コーヒー飲みながら仕事したい

仕事で使う技術的なことの備忘録とか

dotnet ef migrations add したら Unable to create an object of type 'ApplicationDbContext' と怒られるとき

ことの成り行き

もともと dotnet core 1.1 のプロジェクトを dotnet core 2.0 にターゲットフレームワークを差し替えた時のお話。
コードファーストでDBを作るために、主題の通り dotnet ef migrations add XXX を実行したら Unable to create an object of type 'ApplicationDbContext' と怒られた。
ググったら既知の問題らしかったので、備忘録として残す。

解決方法

↓に書かれている通り、Program.cs を修正する。

www.ryadel.com

一応念のため、ソースコードを記載しておく。

public static void Main(string[] args)
{
    // REPLACE THIS:
    // BuildWebHost(args).Run();
 
    // WITH THIS:
    var host = BuildWebHost(args);
    using (var scope = host.Services.CreateScope())
    {
        // Retrieve your DbContext isntance here
        var dbContext = scope.ServiceProvider.GetService<ApplicationDbContext>();
 
        // place your DB seeding code here
        DbSeeder.Seed(dbContext);
    }
    host.Run();
 
    // ref.: https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/
}
 
public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .Build();

WebHost.CreateDefaultBuilder なんてねーよって怒られるとき

で、これだけじゃうまくいかないのが嫌なところ。
dotnet core 1.1 のプロジェクトがベースの場合、上記の通り、 WebHost.CreateDefaultBuilder が存在しないって怒られる。
これは、Nuget しているパッケージのバージョンも dotnet core 2.0 用に更新する必要があるから。

ここまでやって、やっと先に進めた。

けど・・・

結局マイグレーションがうまくいかない。
dotnet ef migrations add XXX を実行すと、成功したようになるんだけど、DB側にはテーブルが作られていない。
コードファースト諦めるかなぁ。要調査