从 bin/Debug 文件夹启动时出现 Fluent 迁移器错误

Fluent migrator error on start from bin/Debug folder

提问人:Gevorg Danielyan 提问时间:8/23/2023 最后编辑:Amit JoshiGevorg Danielyan 更新时间:8/23/2023 访问量:48

问:

我有 API,我在其中使用 FluentMigrator 进行 Dapper 迁移。现在,当我尝试从 bin 文件夹运行构建的 .exe 时,出现异常:

2023-08-23 11:46:49.480 [INF] 1:_1_InitialMigration迁移 !!!无连接处理器不支持该方法 2023-08-23 11:46:49.487 [FTL] 致命错误 System.NotImplementedException:无连接处理器不支持方法 在 FluentMigrator.Runner.Processors.ConnectionlessProcessor.SchemaExists (字符串 schemaName) 在 FluentMigrator.Builders.Schema.Schema.SchemaSchemaQuery.Exists() 在SMC。Backup.Infrastructure.Database.Migrations._1_InitialMigration.Up() 在 D:\ProtelionProjects\smc-backup\Source\SMC 中。Backup.Infrastructure\Database\Migrations\1_InitialMigration.cs:第 17 行 在 FluentMigrator.MigrationBase.GetUpExpressions (IMigrationContext 上下文) 在 FluentMigrator.Runner.MigrationRunner.<>c.b__69_0 (IMigration m, IMigrationContext c) 在 FluentMigrator.Runner.MigrationRunner.ExecuteMigration(IMigration 迁移、Action1 参数、签名 sig、 布尔构造函数、 Boolean wrapExceptions) 在 System.Reflection.RuntimeMethodInfo.Invoke (对象 obj、 BindingFlags invokeAttr、 活页夹绑定器、 对象 [] 参数、 CultureInfo 区域性) 在 Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(对象实例,IApplicationBuilder 生成器) 在 Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.b__0 (IApplicationBuilder builder)2 getExpressions) at FluentMigrator.Runner.MigrationRunner.ApplyMigrationUp(IMigrationInfo migrationInfo, Boolean useTransaction) at FluentMigrator.Runner.MigrationRunner.MigrateUp(Int64 targetVersion, Boolean useAutomaticTransactionManagement) at FluentMigrator.Runner.MigrationRunner.MigrateUp(Boolean useAutomaticTransactionManagement) at FluentMigrator.Runner.MigrationRunner.MigrateUp() at SMC.Backup.Infrastructure.ServiceCollectionExtensions.Migrate(IApplicationBuilder app) in D:\ProtelionProjects\smc-backup\Source\SMC.Backup.Infrastructure\ServiceCollectionExtensions.cs:line 62 at SMC.Backup.Host.Startup.Configure(IApplicationBuilder app) in D:\ProtelionProjects\smc-backup\Source\SMC.Backup.Host\Startup.cs:line 80 at System.RuntimeMethodHandle.InvokeMethod(Object target, Span

我创建了看起来像这样的迁移类

[Migration(1)]
public class _1_InitialMigration : Migration
{
    public override void Down()
    {
        Delete.Table("backups");

        Delete.Schema("public");
    }
    public override void Up()
    {
        // Check if the database exists
        if (!Schema.Schema("public").Exists())
        {
            // Create the database
            Create.Schema("public");
        }

        if (!Schema.Table("backups").Exists())
        {
            Create.Table("backups")
            .WithColumn("id").AsInt32().PrimaryKey().Identity()
            .WithColumn("launch_mode").AsInt16().NotNullable()
            .WithColumn("status").AsInt16().NotNullable().Indexed()
            .WithColumn("started_at").AsDateTime().NotNullable()
            .WithColumn("finished_at").AsDateTime().Nullable()
            .WithColumn("error_message").AsString().Nullable();
        }
    }
}

我已经创建了扩展类,我在其中注入了 FluentMigrator 并在我的 API 启动类中使用。

public static IServiceCollection AddFluentMigrator(this IServiceCollection services, IConfiguration configuration)
{
    services.AddFluentMigratorCore()
            .ConfigureRunner(rb => rb
                .AddPostgres()
                .WithGlobalConnectionString(configuration.GetConnectionString("DefaultConnection"))
                .ScanIn(typeof(_1_InitialMigration).Assembly).For.Migrations())
            .AddLogging(lb => lb.AddFluentMigratorConsole());

    return services;
}
public static IApplicationBuilder Migrate(this IApplicationBuilder app)
{
    using var scope = app.ApplicationServices.CreateScope();
    var migrator = scope.ServiceProvider.GetService<IMigrationRunner>();
    migrator?.ListMigrations();
    migrator?.MigrateUp();
    return app;
}

为什么会发生这种情况,如果它确实是流畅的迁移器使用中的问题,如何解决?

提前致谢。

我试图在 FluentMigrator GitHub 问题中找到解决方案。但我没有得到任何答复。

C# .NET Fluent-Migrator

评论


答: 暂无答案