From 1aec1eb3f0822e17793d43e040efdf127ea8e561 Mon Sep 17 00:00:00 2001 From: crupest Date: Fri, 12 Feb 2021 22:10:56 +0800 Subject: feat: Add databse custom migration service. --- .../Services/Migration/CustomMigrationManager.cs | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 BackEnd/Timeline/Services/Migration/CustomMigrationManager.cs (limited to 'BackEnd/Timeline/Services/Migration/CustomMigrationManager.cs') diff --git a/BackEnd/Timeline/Services/Migration/CustomMigrationManager.cs b/BackEnd/Timeline/Services/Migration/CustomMigrationManager.cs new file mode 100644 index 00000000..ba86e10b --- /dev/null +++ b/BackEnd/Timeline/Services/Migration/CustomMigrationManager.cs @@ -0,0 +1,55 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; +using Timeline.Entities; + +namespace Timeline.Services.Migration +{ + public interface ICustomMigrationManager + { + Task Migrate(); + } + + public class CustomMigrationManager : ICustomMigrationManager + { + private IEnumerable _migrations; + private DatabaseContext _database; + + private ILogger _logger; + + public CustomMigrationManager(IEnumerable migrations, DatabaseContext database, ILogger logger) + { + _migrations = migrations; + _database = database; + _logger = logger; + } + + public async Task Migrate() + { + foreach (var migration in _migrations) + { + var name = migration.GetName(); + var did = await _database.Migrations.AnyAsync(m => m.Name == name); + + _logger.LogInformation("Found custom migration '{0}'. Did: {1}.", name, did); + + if (!did) + { + _logger.LogInformation("Begin custom migration '{0}'.", name); + + await using var transaction = await _database.Database.BeginTransactionAsync(); + + await migration.Execute(_database); + + _database.Migrations.Add(new MigrationEntity { Name = name }); + await _database.SaveChangesAsync(); + + await transaction.CommitAsync(); + + _logger.LogInformation("End custom migration '{0}'.", name); + } + } + } + } +} -- cgit v1.2.3 From 83910122bfd0aa9bd207b6d5f631774415312716 Mon Sep 17 00:00:00 2001 From: crupest Date: Fri, 12 Feb 2021 22:32:10 +0800 Subject: fix: Fix migration bug. --- BackEnd/Timeline/Program.cs | 14 +++++++------- BackEnd/Timeline/Properties/launchSettings.json | 5 ++--- .../Timeline/Services/Migration/CustomMigrationManager.cs | 4 ++-- 3 files changed, 11 insertions(+), 12 deletions(-) (limited to 'BackEnd/Timeline/Services/Migration/CustomMigrationManager.cs') diff --git a/BackEnd/Timeline/Program.cs b/BackEnd/Timeline/Program.cs index 0f75908f..19fa6e37 100644 --- a/BackEnd/Timeline/Program.cs +++ b/BackEnd/Timeline/Program.cs @@ -4,6 +4,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using System.Resources; +using System.Threading.Tasks; using Timeline.Entities; using Timeline.Services; using Timeline.Services.Migration; @@ -14,20 +15,19 @@ namespace Timeline { public static class Program { - public static void Main(string[] args) + public async static Task Main(string[] args) { var host = CreateWebHostBuilder(args).Build(); + var databaseBackupService = host.Services.GetRequiredService(); + databaseBackupService.BackupNow(); + using (var scope = host.Services.CreateScope()) { - var databaseBackupService = scope.ServiceProvider.GetRequiredService(); - databaseBackupService.BackupNow(); - var databaseContext = scope.ServiceProvider.GetRequiredService(); - databaseContext.Database.Migrate(); - + await databaseContext.Database.MigrateAsync(); var customMigrationManager = scope.ServiceProvider.GetRequiredService(); - customMigrationManager.Migrate(); + await customMigrationManager.Migrate(); } host.Run(); diff --git a/BackEnd/Timeline/Properties/launchSettings.json b/BackEnd/Timeline/Properties/launchSettings.json index 851fc6a8..3c8a465b 100644 --- a/BackEnd/Timeline/Properties/launchSettings.json +++ b/BackEnd/Timeline/Properties/launchSettings.json @@ -5,8 +5,7 @@ "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_FRONTEND": "Proxy" - }, - "applicationUrl": "http://0.0.0.0:5000" + } }, "Dev-Mock": { "commandName": "Project", @@ -30,4 +29,4 @@ } } } -} \ No newline at end of file +} diff --git a/BackEnd/Timeline/Services/Migration/CustomMigrationManager.cs b/BackEnd/Timeline/Services/Migration/CustomMigrationManager.cs index ba86e10b..f6f156cc 100644 --- a/BackEnd/Timeline/Services/Migration/CustomMigrationManager.cs +++ b/BackEnd/Timeline/Services/Migration/CustomMigrationManager.cs @@ -36,7 +36,7 @@ namespace Timeline.Services.Migration if (!did) { - _logger.LogInformation("Begin custom migration '{0}'.", name); + _logger.LogWarning("Begin custom migration '{0}'.", name); await using var transaction = await _database.Database.BeginTransactionAsync(); @@ -47,7 +47,7 @@ namespace Timeline.Services.Migration await transaction.CommitAsync(); - _logger.LogInformation("End custom migration '{0}'.", name); + _logger.LogWarning("End custom migration '{0}'.", name); } } } -- cgit v1.2.3