ALTER TYPE ... ADD 不能 运行 在事务块内 - Entity Framework

ALTER TYPE ... ADD cannot run inside a transaction block - Entity Framework

我在添加枚举时尝试 运行 迁移到 PostGres 数据库时遇到错误。我正在使用 Dotnet5 和 Entity Framework

更改类型 ethnicity_enum 添加值 'hi'; Npgsql.PostgresException (0x80004005): 25001: ALTER TYPE ... ADD 不能 运行 在事务块内

这是创建的迁移:

 protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.AlterDatabase()
            .Annotation("Npgsql:Enum:patient_ethnicity_enum", "afna,hi")
            .OldAnnotation("Npgsql:Enum:patient_ethnicity_enum", "afna");

    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.AlterDatabase()
            .Annotation("Npgsql:Enum:patient_ethnicity_enum",
                "afna")
            .OldAnnotation("Npgsql:Enum:patient_ethnicity_enum",
                "afna,hi");
    }

有什么解决办法吗?

根据 Adrian 的评论,我发现您可以这样做。

  migrationBuilder.Sql("ALTER TYPE patient_ethnicity_enum ADD VALUE 'hi'", true);
  migrationBuilder.AlterDatabase();

“true”参数用于抑制交易。

这可行,但并不理想,因为回滚迁移可能会导致实时数据出现大量问题。