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");
}
我将现有的 属性 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");
}