提问人:Ghassan Karwchan 提问时间:8/11/2023 最后编辑:Ghassan Karwchan 更新时间:8/12/2023 访问量:93
仅针对一个特定迁移运行 FluentMigrator
Run FluentMigrator for one specific migration only
问:
我们使用 FluentMigrator 和 C# 来运行我们的数据库更改,我们不使用任何标签,因为我们有简单的解决方案,所以我们所有的迁移都没有任何标签。
我知道这似乎并不常见,但我希望他们的 API 中有一个解决方案。
是否有一种编程方式可以通过指定其版本号(无标记)来运行一个特定的迁移?
我不是在谈论
migrationRunner.MigrateUp(version);
因为这将运行该版本之前的所有迁移。
我想只应用一个特定的迁移,如果未应用它们,则不运行以前的版本。
因此,如果最后应用的版本是 26,并且我想运行版本 30。那么有没有办法只跑 30 而不跑 27,28,29 ?
正如我所说,我们所有的迁移都没有标签,所以很难用标签来做。
答:
0赞
Orifjon
8/11/2023
#1
您可以在迁移表中将迁移版本更新为以前的版本,并使用 .它会在两者之间运行迁移,这将是您选择的版本。migrationRunner.MigrateUp(version);
评论
0赞
Ghassan Karwchan
8/11/2023
我在问题中说我不想使用 MigrateUp
0赞
Orifjon
8/11/2023
您不想使用它是否有特定原因?如您所述,它运行当前版本和指定版本之间的所有迁移。我的建议是将当前版本设置为您想要的版本,直接减去一个,这样它就只运行您想要的版本。
0赞
Ghassan Karwchan
8/12/2023
#2
事实证明,他们的 API 中有一种方法可以做到这一点。
我必须阅读他们的代码。
如果你想做这个疯狂的事情,你可以在代码中这样做:
private static void ApplySpecificMigration(IServiceProvider serviceProvider, long version)
{
var runner = serviceProvider.GetRequiredService<IMigrationRunner>();
var targetMigration = runner.MigrationLoader.LoadMigrations()
.FirstOrDefault(migration => migration.Key == version);
((MigrationRunner) migrationRunner).ApplyMigrationUp(migration.Value, true);
}
评论