public T TryCreate <T>(string name, bool autoMigrate) where T : class, IDbConnection { using (_Logger.LogScope(LogLevel.Trace, nameof(DatabaseConnectionFactory) + "." + nameof(TryCreate))) { var connectionString = _Configuration.Element <string>($"Data/ConnectionStrings/{name}") .WithEncryption("ConnectionStrings", _DataProtection) .Value(); if (connectionString == null) { _Logger.LogDebug($"no connection string for database connection '{name}'"); return(null); } var provider = _Container.Resolve <IDatabaseConnectionProvider <T> >(IfUnresolved.ReturnDefaultIfNotRegistered); if (provider == null) { _Logger.LogError($"no database provider for type '{typeof(T)}' has been registered"); return(null); } var connection = provider.Create(connectionString); if (autoMigrate) { _DatabaseMigrator.Migrate(connection, name); } return(connection); } }
public void Initialise() { try { // Ensure database is up-to-date _databaseMigrator.Migrate(ConnectionString); } catch (Exception) { _logger.LogError("Error performing database migration; deleting database and retrying"); // Delete database and try to migrate again, in case the database file is corrupt or // there was an incompatible schema update. File.Delete(CacheDatabase); _databaseMigrator.Migrate(ConnectionString); } }
public void Configure( IServiceScopeFactory scopeFactory, IDatabaseMigrator dbMigrator, IApplicationBuilder app, ILogger <Startup> log, IHostingEnvironment env) { var version = typeof(Startup).Assembly .GetCustomAttribute <AssemblyInformationalVersionAttribute>() .InformationalVersion; log.LogInformation(Events.Startup, "Starting {ServerVersion}", version); using (var scope = scopeFactory.CreateScope()) { dbMigrator.Migrate(); } if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); } app.UseMiddleware <IpBlockerMiddleware>(); app.UseMiddleware <LoggingMiddleware>(); app.UseMiddleware <CookieAuthenticationMiddleware>(); app.UseAuthentication(); app.UseStaticFiles(); app.UseSpaStaticFiles(); app.UseMiddleware <UserPreloadMiddleware>(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller}/{action=Index}/{id?}"); }); if (!Runtime.IsIntegrationTesting) { app.UseSpa(spa => { spa.Options.SourcePath = "ClientApp"; if (env.IsDevelopment()) { spa.UseAngularCliServer(npmScript: "start"); } }); } }
public void SetupDbMigrationTest() { DbAccessFacadeMock dbAccessFacade = new DbAccessFacadeMock(); IDatabaseMigrator migrator = DatabaseMigratorBuilder.Build(config, dbAccessFacade); migrator.Migrate(new SqlConnection()); Assert.True(dbAccessFacade.AppliedItems.Count == 5); }
public async Task EnqueueManyAsync(IEnumerable <WorkQueueItem> items) { using (var databaseConnection = TryCreateConnection()) { if (databaseConnection == null) { return; } databaseConnection.Open(); await _DatabaseMigrator.Migrate(databaseConnection, "SqliteWorkqueue"); using (var transaction = databaseConnection.BeginTransaction().NotNull()) { foreach (var item in items) { var json = item.Payload.ToString(); var hash = _Hasher.Hash(json); try { await databaseConnection.ExecuteAsync( "INSERT INTO queue (type, payload, hash, when_to_process, retry_count) VALUES (@Type, @Payload, @Hash, @WhenToProcess, @RetryCount)", new { item.Type, Payload = json, Hash = hash, item.WhenToProcess, item.RetryCount }, transaction).NotNull(); } catch (SqliteException ex) when(ex.SqliteErrorCode == _SqliteConstraintViolationErrorCode) { // ignored } } transaction.Commit(); } } }
private void Provision(string connection, Type migration) { _log.LogInformation($"Provisioning {migration.FullName}"); var assembly = System.Reflection.Assembly.GetAssembly(migration); _log.LogInformation($"Creating db"); _creator.Create(_config.MasterConnectionString, connection); _log.LogInformation($"Migrating db"); _migrator.Migrate(connection, assembly); _log.LogInformation($"Provisioned {migration.FullName}"); }
public void ParametersAndFiltersTest() { DbAccessFacadeMock dbAccessFacade = new DbAccessFacadeMock(); config.AddScriptsLocation(Assembly.GetExecutingAssembly(), "TemplateTestScripts"); IDatabaseMigrator migrator = DatabaseMigratorBuilder.Build(config, dbAccessFacade); migrator.Migrate(new SqlConnection()); PendingItem script = dbAccessFacade.ClasspathScripts.First(s => s.Version.Equals("201701171635")); Assert.NotNull(script); Assert.True(script.Content.ToString().Contains("0x")); }
public void ParametersTest() { DbAccessFacadeMock dbAccessFacade = new DbAccessFacadeMock(); config.AddParameter("parameters_test_key_1", "col1"); config.AddParameter("parameters_test_key_2", "col2"); IDatabaseMigrator migrator = DatabaseMigratorBuilder.Build(config, dbAccessFacade); migrator.Migrate(new SqlConnection()); PendingItem script = dbAccessFacade.ClasspathScripts.First(s => s.Version.Equals("201606201610")); Assert.NotNull(script); Assert.True(script.Content.ToString().Contains("[col1]")); Assert.True(script.Content.ToString().Contains("[col2]")); Assert.False(script.Content.ToString().Contains("{{parameters_test_key_1}}")); Assert.False(script.Content.ToString().Contains("{{parameters_test_key_2}}")); }
public void UpdateSchemaTest() { DbAccessFacadeMock dbAccessFacade = new DbAccessFacadeMock(); dbAccessFacade.DbItems.Add(new AppliedItem { Id = "201606201607", Type = ItemType.Versioned, Version = "201606201607", Name = "V2016.06.20_1607_test1.sql", Executed = DateTime.Now, Checksum = "2e542df38430899677f99ce8be5b97a6" }); IDatabaseMigrator migrator = DatabaseMigratorBuilder.Build(config, dbAccessFacade); migrator.Migrate(new SqlConnection()); Assert.True(dbAccessFacade.DbItems.Count == 5); Assert.True(dbAccessFacade.AppliedItems.Count == 4); }
public void RepeatableScriptsNoReapplyTest() { DbAccessFacadeMock dbAccessFacade = new DbAccessFacadeMock(); dbAccessFacade.DbItems.Add(new AppliedItem { Id = "201606201701", Type = ItemType.Repeatable, Version = "201606201701", Name = "R2016.06.20_1701_repeatable_test2.sql", Executed = DateTime.Now, Checksum = "470f6a50c4fd0323b2dc95be00ab72e1" }); IDatabaseMigrator migrator = DatabaseMigratorBuilder.Build(config, dbAccessFacade); migrator.Migrate(new SqlConnection()); Assert.True(dbAccessFacade.DbItems.Count == 1); Assert.True(dbAccessFacade.AppliedItems.Count == 0); }
public void RepeatableScriptsReapplyTest() { DbAccessFacadeMock dbAccessFacade = new DbAccessFacadeMock(); dbAccessFacade.DbItems.Add(new AppliedItem { Id = "201606201701", Type = ItemType.Repeatable, Version = "201606201701", Name = "R2016.06.20_1701_repeatable_test2.sql", Executed = DateTime.Now, Checksum = "2e542df38430899677f99ce8be5b97a7" }); IDatabaseMigrator migrator = DatabaseMigratorBuilder.Build(config, dbAccessFacade); migrator.Migrate(new SqlConnection()); Assert.True(dbAccessFacade.DbItems.Count == 1); Assert.True(dbAccessFacade.AppliedItems.Count == 1); }
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IDatabaseMigrator databaseMigrator) { Activity.DefaultIdFormat = ActivityIdFormat.W3C; databaseMigrator.Migrate(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseConfiguredSwagger(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
public void Initialize(IStore store) { _migrator.Migrate(store); }
public async Task <Unit> Handle(MigrateDatabaseRequest request, CancellationToken cancellationToken) { await _migrator.Migrate(); return(Unit.Value); }