ASP - Core Migrate EF Core SQL DB on Startup

后端 未结 11 963
故里飘歌
故里飘歌 2020-12-01 02:32

Is it possible to have my ASP Core Web API ensure the DB is migrated to the latest migration using EF Core? I know this can be done through the command line, but I want to

11条回答
  •  北荒
    北荒 (楼主)
    2020-12-01 03:20

    Starting .NET Core 2 using C# 7.1, you can have an asynchronous Main method to your app, so you can call all initialization logic before you run the host, right after it has finished building:

    public class Program
    {
      public static async Task Main(string[] args)
      {
        //first build
        var host = CreateHostBuilder(args).Build();
    
        //initialize
        using (var serviceScope = host.Services.CreateScope())
        {
          var serviceProvider = serviceScope.ServiceProvider;
          var isDevelopment = 
            serviceProvider.GetRequiredService().IsDevelopment();
    
          using var context = serviceProvider.GetRequiredService();
    
    
          if (isDevelopment)
            await context.Database.EnsureCreatedAsync();
          else
            await context.Database.MigrateAsync();
    
          if (isDevelopment)
          {
            using var userManager = 
              serviceProvider.GetRequiredService>();
            await userManager
              .CreateAsync(new AppUser { UserName = "dummy", Email = "dummy@dumail.com" },
              password: "1234");
          }
        }
    
        //now run
        host.Run();
      }
    
      public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
          .ConfigureWebHostDefaults(webBuilder =>
          {
            webBuilder.UseStartup();
          });
    }
    

提交回复
热议问题