ことの成り行き
もともと dotnet core 1.1 のプロジェクトを dotnet core 2.0 にターゲットフレームワークを差し替えた時のお話。
コードファーストでDBを作るために、主題の通り dotnet ef migrations add XXX
を実行したら Unable to create an object of type 'ApplicationDbContext'
と怒られた。
ググったら既知の問題らしかったので、備忘録として残す。
解決方法
↓に書かれている通り、Program.cs
を修正する。
一応念のため、ソースコードを記載しておく。
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側にはテーブルが作られていない。
コードファースト諦めるかなぁ。要調査
コメント