aboutsummaryrefslogtreecommitdiff
path: root/BackEnd/Timeline/Services/Migration/CustomMigrationManager.cs
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-02-12 22:39:57 +0800
committerGitHub <noreply@github.com>2021-02-12 22:39:57 +0800
commitc3d0a5f88de0fbdf6bc584548832017087ab1248 (patch)
treec1c992987263897fb1c091c5129c6d1f1e64073d /BackEnd/Timeline/Services/Migration/CustomMigrationManager.cs
parente232e31de839dc0c0de691c5856f29dcb92cf0fc (diff)
parent5849d34d9fcf1ccfb7fe5cc0842765129f7198b4 (diff)
downloadtimeline-c3d0a5f88de0fbdf6bc584548832017087ab1248.tar.gz
timeline-c3d0a5f88de0fbdf6bc584548832017087ab1248.tar.bz2
timeline-c3d0a5f88de0fbdf6bc584548832017087ab1248.zip
Merge pull request #267 from crupest/backend
春节大换血 Spring festival big change.
Diffstat (limited to 'BackEnd/Timeline/Services/Migration/CustomMigrationManager.cs')
-rw-r--r--BackEnd/Timeline/Services/Migration/CustomMigrationManager.cs55
1 files changed, 55 insertions, 0 deletions
diff --git a/BackEnd/Timeline/Services/Migration/CustomMigrationManager.cs b/BackEnd/Timeline/Services/Migration/CustomMigrationManager.cs
new file mode 100644
index 00000000..f6f156cc
--- /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<ICustomMigration> _migrations;
+ private DatabaseContext _database;
+
+ private ILogger<CustomMigrationManager> _logger;
+
+ public CustomMigrationManager(IEnumerable<ICustomMigration> migrations, DatabaseContext database, ILogger<CustomMigrationManager> 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.LogWarning("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.LogWarning("End custom migration '{0}'.", name);
+ }
+ }
+ }
+ }
+}