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

EF Core Code First Oracle - Cannot set nullable an existing colum

我将现有的 属性 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之后,该列仍然是not nullable:

当我 运行 script-migration 检查生成的 SQL 时,我们可以看到它显然不关心我的 属性 现在可以为空的事实:

        ALTER TABLE "t0003_transfer_request" MODIFY "c0003_total_amount_ttc" decimal(13,4)
        /

我是不是做错了什么? 这是一个错误吗?

我尝试在映射中设置 IsRequired(false),但结果相同。

         builder.Property(tr => tr.TotalAmountTTC).HasColumnName("c0003_total_amount_ttc").IsRequired(false);

好的,对我来说它看起来像是 hack,但我找到了一种方法来使 NULLABLE 成为一个已经存在的列 NOT NULL :

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

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