diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs index 6c09ffd233..dcc59b4288 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs @@ -37,51 +37,51 @@ namespace MyCompanyName.MyProjectName.Data { Logger.LogInformation("Started database migrations..."); - await MigrateHostDatabaseAsync(); + await MigrateDatabaseSchemaAsync(); + await SeedDataAsync(); + + Logger.LogInformation($"Successfully completed host database migrations."); var tenants = await _tenantRepository.GetListAsync(includeDetails: true); - var i = 0; + var migratedDatabaseSchemas = new HashSet(); foreach (var tenant in tenants.Where(t => t.ConnectionStrings.Any())) { + var tenantConnectionStrings = tenant.ConnectionStrings.Select(x => x.Value).ToList(); using (_currentTenant.Change(tenant.Id)) { - Logger.LogInformation($"Migrating {tenant.Name} database schema... ({++i} of {tenants.Count})"); - await MigrateTenantDatabasesAsync(tenant); - Logger.LogInformation($"Successfully completed {tenant.Name} database migrations."); + if (!migratedDatabaseSchemas.Any() || !migratedDatabaseSchemas.IsSupersetOf(tenantConnectionStrings)) + { + await MigrateDatabaseSchemaAsync(tenant); + + migratedDatabaseSchemas.AddIfNotContains(tenantConnectionStrings); + } + + await SeedDataAsync(tenant); } + + Logger.LogInformation($"Successfully completed {tenant.Name} tenant database migrations."); } Logger.LogInformation("Successfully completed database migrations."); } - private async Task MigrateHostDatabaseAsync() + private async Task MigrateDatabaseSchemaAsync(Tenant tenant = null) { - Logger.LogInformation("Migrating host database schema..."); + Logger.LogInformation( + $"Migrating schema for {(tenant == null ? "host" : tenant.Name + " tenant")} database..."); foreach (var migrator in _dbSchemaMigrators) { await migrator.MigrateAsync(); } - - Logger.LogInformation("Executing host database seed..."); - await _dataSeeder.SeedAsync(); - - Logger.LogInformation("Successfully completed host database migrations."); } - private async Task MigrateTenantDatabasesAsync(Tenant tenant) + private async Task SeedDataAsync(Tenant tenant = null) { - Logger.LogInformation($"Migrating schema for {tenant.Name} database..."); - - foreach (var migrator in _dbSchemaMigrators) - { - await migrator.MigrateAsync(); - } + Logger.LogInformation($"Executing {(tenant == null ? "host" : tenant.Name + " tenant")} database seed..."); - Logger.LogInformation($"Executing {tenant.Name} tenant database seed..."); - - await _dataSeeder.SeedAsync(tenant.Id); + await _dataSeeder.SeedAsync(tenant?.Id); } } } \ No newline at end of file