EF Core Code First Oracle - 无法将现有列设置为可空

3

我将现有的属性 decimal 设置为 decimal?

    public decimal? TotalAmountTTC { get; set; }

然后我使用 add-migration 命令创建了一个迁移,它生成了以下内容:
        migrationBuilder.AlterColumn<decimal>(
            name: "c0003_total_amount_ttc",
            table: "t0003_transfer_request",
            type: "decimal(13,4)",
            nullable: true,
            oldClrType: typeof(decimal),
            oldType: "decimal(13,4)");

但是在我执行了update-database之后,该列仍然是非空的:

enter image description here

当我运行script-migration来检查生成的SQL时,我们可以清楚地看到它并不关心我的属性现在是否可为空:
        ALTER TABLE "t0003_transfer_request" MODIFY "c0003_total_amount_ttc" decimal(13,4)
        /

我做错了什么吗? 这是一个bug吗?
我尝试在映射中设置IsRequired(false),但结果相同。
         builder.Property(tr => tr.TotalAmountTTC).HasColumnName("c0003_total_amount_ttc").IsRequired(false);

如果其他方法都失败了,只需运行ALTER TABLE "t0003_transfer_request" MODIFY "c0003_total_amount_ttc" NULL;。很有可能不支持这样的修改。如果将列从可为空更改为不可为空,您会期望工具会做什么? - undefined
@MarmiteBomber 我不想去弄整个 CI/CD,只想保持单个 SQL 查询来更新这个列。 - undefined
@MarmiteBomber 我不明白你的问题。 - undefined
第一个是作为一种解决方法而不是推荐的。问题涉及到相反的情况 - 你有一个可为空的列,想要将其改为非空列。在这里,你必须处理数据 - 在列定义可以修改之前提供一些默认值。这里没有简单的工具解决方案... - undefined
1个回答

1

好的,看起来对我来说像是一个黑客攻击,但我已经找到了一种方法,可以将已经存在的NOT NULL列转换为NULLABLE列:

您需要在数据类型中包含NULL(在我的情况下:decimal(13,4) NULL):

    public void Configure(EntityTypeBuilder<TransferRequest> builder)
    {
        builder.Property(tr => tr.TotalAmountTTC).HasColumnType("decimal(13,4) NULL");
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接