// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { // app.UseExceptionHandler("/Home/Error"); app.UseDeveloperExceptionPage(); } using (var serviceScope = app.ApplicationServices.GetRequiredService <IServiceScopeFactory>().CreateScope()) { // get the application's database context DbContext context = serviceScope.ServiceProvider.GetService <DbTestContext>(); // do any pending migrations context.Database.Migrate(); // populate the column comments. Comments are the PGSQL column descriptions DbCommentsUpdater <DbTestContext> updater = new DbCommentsUpdater <DbTestContext>((DbTestContext)context); updater.UpdateDatabaseDescriptions(); } app.UseMvc(); app.UseDefaultFiles(); app.UseStaticFiles(); app.UseSwagger(); app.UseSwaggerUi(); }
/// <summary> /// Database Migration /// </summary> /// <param name="app"></param> /// <param name="loggerFactory"></param> private void TryMigrateDatabase(IApplicationBuilder app, ILoggerFactory loggerFactory) { ILogger log = loggerFactory.CreateLogger(typeof(Startup)); log.LogInformation("Attempting to migrate the database ..."); try { using (IServiceScope serviceScope = app.ApplicationServices.GetRequiredService <IServiceScopeFactory>().CreateScope()) { log.LogInformation("Fetching the application's database context ..."); DbContext context = serviceScope.ServiceProvider.GetService <DbAppContext>(); log.LogInformation("Migrating the database ..."); context.Database.Migrate(); log.LogInformation("The database migration complete."); log.LogInformation("Updating the database documentation ..."); DbCommentsUpdater <DbAppContext> updater = new DbCommentsUpdater <DbAppContext>((DbAppContext)context); updater.UpdateDatabaseDescriptions(); log.LogInformation("The database documentation has been updated."); log.LogInformation("Adding/Updating seed data ..."); Seeders.SeedFactory <DbAppContext> seederFactory = new Seeders.SeedFactory <DbAppContext>(Configuration, _hostingEnv, loggerFactory); seederFactory.Seed((DbAppContext)context); log.LogInformation("Seeding operations are complete."); } log.LogInformation("All database migration activities are complete."); } catch (Exception e) { StringBuilder msg = new StringBuilder(); msg.AppendLine("The database migration failed!"); msg.AppendLine("The database may not be available and the application will not function as expected."); msg.AppendLine("Please ensure a database is available and the connection string is correct."); msg.AppendLine("If you are running in a development environment, ensure your test database and server configuraiotn match the project's default connection string."); log.LogCritical(new EventId(-1, "Database Migration Failed"), e, msg.ToString()); } }