gpt4 book ai didi

C# FluentMigrator.Runner 控制台应用程序设置每个 session 的事务

转载 作者:行者123 更新时间:2023-12-04 13:16:21 25 4
gpt4 key购买 nike

我正在使用 FlunetMigrator.Runner.3.2.1,发现该版本不再默认回滚所有迁移,其中之一失败。它说它们是每个迁移文件!这不会增加值(value)。有没有办法在将其作为 .net 核心控制台应用程序运行时设置每个 session 的事务。

我看到有这个链接 https://fluentmigrator.github.io/articles/runners/runner-console.html但是说使用我们没有使用的 Migrate.exe 文件,我们使用的是控制台。能否在代码中设置事务级别为session?

为什么有人想要运行它并且只完成一些更改,全有或全无是更好的方法

最佳答案

我找到答案了!您在 Runner 选项中设置它,如下所示

opt.TransactionPerSession = true;

创建 IServiceProvide 的完整方法

private static IServiceProvider CreateServices(string connectionString,
CommandLineArguments commandLineArguments)
{
return new ServiceCollection()
// Add common FluentMigrator services
.AddFluentMigratorCore()
.ConfigureRunner(rb => rb
// Add SQL Server support to FluentMigrator
.AddSqlServer()
// Set the connection string
.WithGlobalConnectionString(connectionString)

// Define the assembly containing the migrations
.ScanIn(typeof(Program).Assembly).For.Migrations().For.EmbeddedResources())
// Enable logging to console in the FluentMigrator way
.AddLogging(lb => lb.AddFluentMigratorConsole())
.Configure<RunnerOptions>(opt => {
opt.Tags = commandLineArguments.Tags.ToArray();
opt.TransactionPerSession = true; })
// Build the service provider
.BuildServiceProvider(false);
}

下面的代码是使用 IServiceProvider 的完整示例

var serviceProvider = CreateServices(connectionString, commandLineArguments);

// Put the database update into a scope to ensure
// that all resources will be disposed.
using (var scope = serviceProvider.CreateScope())
{
try
{
UpdateDatabase(scope.ServiceProvider, commandLineArguments);
}
catch (Exception e)
{
Console.WriteLine("There was a problem with the migration: " + e.Message + "\n" +
e.StackTrace);
}
migrationRun = true;
}

更新数据库代码:

private static void UpdateDatabase(IServiceProvider serviceProvider, CommandLineArguments commandLineArguments)
{
// Instantiate the runner
var runner = serviceProvider.GetRequiredService<IMigrationRunner>();

if (commandLineArguments.Downgrade)
{
runner.MigrateDown(commandLineArguments.Version != -1 ? commandLineArguments.Version : 0);
}
else
{
if (commandLineArguments.Version != -1)
{
runner.MigrateUp(commandLineArguments.Version);
}
else
{
runner.MigrateUp();
}

}
}

关于C# FluentMigrator.Runner 控制台应用程序设置每个 session 的事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60054503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com