ASP.NET Core 2.0/EF Core 2.0を使用している場合、このようなケースをカバーするための変更が加えられているため、コマンドラインツールを使用すると効果的です。
this announcementで覆われています。
アプリケーション全体を構成する静的な方法がありますが、実行しません。 EF 2.0でまた
public class Program
{
public static void Main(string[] args)
{
var host = BuildWebHost(args);
host.Run();
}
// Tools will use this to get application services
public static IWebHost BuildWebHost(string[] args) =>
new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
}
今BuildWebHost
が呼び出された後、メインメソッドへの移行を移動することをお勧めします。
public static IWebHost Migrate(this IWebHost webhost)
{
using (var scope = webhost.Services.GetService<IServiceScopeFactory>().CreateScope())
{
using (var dbContext = scope.ServiceProvider.GetRequiredService<MyDbContext>())
{
dbContext.Database.Migrate();
}
}
return webhost;
}
は今、あなたのアプリケーションが実行された場合にのみ、実行して移行:Migrate
は、拡張メソッドです。たとえば
public static void Main(string[] args)
{
var host = BuildWebHost(args)
.Migrate();
host.Run();
}
コマンドラインツールを実行すると、BuildWebHost
が呼び出され、移行は適用されません。
貼り付けたコードスニペットを直接コピーする場合は、「scope.ServiceProvider.GetRequiredService() 'です。 –
IvanJazz