【发布时间】:2023-04-10 01:26:02
【问题描述】:
我有使用 FluentMigrator 迁移的控制台应用程序,但现在我需要在实际迁移过程之前实现用户确认。我进入了 repo 资源,了解了版本加载器以及如何使用 IServiceProvider 获取未应用的迁移列表。但是还没有找到一种方法来打印将在MigrateUp() 中使用的迁移的 SQL 脚本。我也在使用 SQL Server 包。谁能给个方向?
private static void UpdateDatabase(IServiceProvider serviceProvider)
{
var runner = serviceProvider.GetRequiredService<IMigrationRunner>();
var versionLoader = serviceProvider.GetRequiredService<IVersionLoader>();
var migrationContext = serviceProvider.GetRequiredService<IMigrationContext>();
var migrations = runner.MigrationLoader.LoadMigrations()
.Where(migration => !versionLoader.VersionInfo.HasAppliedMigration(migration.Key))
.ToList();
// print migrations up expressions
foreach (var migration in migrations)
{
Console.WriteLine($"Pending migration: {migration.Value.GetName()}");
Console.WriteLine("SQL:");
migration.Value.Migration.GetUpExpressions(migrationContext);
foreach (var expression in migrationContext.Expressions)
{
Console.WriteLine(expression); // this just outputs "CreateTable Test" in my case
}
}
bool userAccepted = true; // TODO: get confirmation from user
if (!userAccepted)
return;
// Execute the migrations
runner.MigrateUp();
}
【问题讨论】:
-
只是一个想法。命令行界面有
/output标志,它将输出迁移到文件。见fluentmigrator.github.io/articles/runners/runner-console.html。您可以查看源代码以了解其工作原理。
标签: c# .net-core-3.1 fluent-migrator