2017-08-29 7 views
3

私はここ数ヶ月間にいくつかバージョンアップグレードを行いましたが、今度は "remove-migration"を使用して元に戻したマイグレーションを削除すると、初めてアプリケーションが実行されることに気付きました。remove-migrationが私のアプリケーションを実行するのはなぜですか?

(スタートアップの中でアップデートデータベースを実行しているため、マイグレーションを削除できない状況に遭遇しました。マイグレーションを削除しようとするたびに自動的にマイグレーションが実行され、それはデータベースでそれを見るので、それを削除できませんでした。)

何か考えですか?

答えて

17

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が呼び出され、移行は適用されません。

+2

貼り付けたコードスニペットを直接コピーする場合は、「scope.ServiceProvider.GetRequiredService () 'です。 – IvanJazz

関連する問題