/// <summary> /// SeedFactory Constructor /// </summary> /// <param name="configuration"></param> /// <param name="env"></param> /// <param name="loggerFactory"></param> public SeedFactory(IConfiguration configuration, IHostingEnvironment env, ILoggerFactory loggerFactory, Gov.Lclb.Cllb.Public.Contexts.Microsoft.Dynamics.CRM.System system, IDistributedCache distributedCache) { _env = env; _loggerFactory = loggerFactory; _logger = _loggerFactory.CreateLogger(typeof(SeedFactory <T>)); _configuration = configuration; _system = system; _distributedCache = distributedCache; LoadSeeders(); _seederInstances.Sort(new SeederComparer <T>()); }
public NewsletterSeeder(IConfiguration configuration, IHostingEnvironment env, ILoggerFactory loggerFactory, Gov.Lclb.Cllb.Public.Contexts.Microsoft.Dynamics.CRM.System system, IDistributedCache distributedCache) : base(configuration, env, loggerFactory) { }
// 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) { string pathBase = Configuration["BASE_PATH"]; if (!string.IsNullOrEmpty(pathBase)) { app.UsePathBase(pathBase); } if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseXContentTypeOptions(); app.UseXfo(xfo => xfo.Deny()); app.UseStaticFiles(); app.UseSpaStaticFiles(); app.UseNoCacheHttpHeaders(); // IMPORTANT: This session call MUST go before UseMvc() app.UseSession(); app.UseAuthentication(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller}/{action=Index}/{id?}"); }); var log = loggerFactory.CreateLogger("Startup"); app.UseSpa(spa => { // To learn more about options for serving an Angular SPA from ASP.NET Core, // see https://go.microsoft.com/fwlink/?linkid=864501 spa.Options.SourcePath = "ClientApp"; if (env.IsDevelopment()) { spa.UseAngularCliServer(npmScript: "start"); } }); string connectionString = "unknown."; try { using (IServiceScope serviceScope = app.ApplicationServices.GetRequiredService <IServiceScopeFactory>().CreateScope()) { log.LogInformation("Fetching the application's database context ..."); AppDbContext context = serviceScope.ServiceProvider.GetService <AppDbContext>(); IDistributedCache distributedCache = serviceScope.ServiceProvider.GetService <IDistributedCache>(); Gov.Lclb.Cllb.Public.Contexts.Microsoft.Dynamics.CRM.System system = serviceScope.ServiceProvider.GetService <Gov.Lclb.Cllb.Public.Contexts.Microsoft.Dynamics.CRM.System>(); connectionString = context.Database.GetDbConnection().ConnectionString; log.LogInformation("Migrating the database ..."); context.Database.Migrate(); log.LogInformation("The database migration complete."); // run the database seeders log.LogInformation("Adding/Updating seed data ..."); Seeders.SeedFactory <AppDbContext> seederFactory = new Seeders.SeedFactory <AppDbContext>(Configuration, env, loggerFactory, system, distributedCache); seederFactory.Seed((AppDbContext)context); log.LogInformation("Seeding operations 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 configuration match the project's default connection string."); msg.AppendLine("Which is: " + connectionString); log.LogCritical(new EventId(-1, "Database Migration Failed"), e, msg.ToString()); } }