我正在尝试编写一个迁移,使用 EntityFramework 6 为 Oracle 数据库中的NUMBER列设置默认值。这是我第一次尝试没有设置默认值:
public override void Up()
{
AddColumn("MTA.PLAN_SHEETS", "QUANTITY_CHANGED", c => c.Decimal(nullable: true, precision: 3, scale: 0, defaultValueSql: "1"));
}
我还尝试使用defaultValue
代替defaultValueSql
,并且再次没有设置列的默认值。
我的迁移代码有什么问题吗?
答案 0 :(得分:3)
我遇到了与Oracle和EF6一样的问题。看来Oracle提供商不支持它。但是有一种解决方法,万一你还没有找到它。
首先需要将QuantityChanged属性设置为模型中的可空(或Fluent API,无论您在何处处理此属性)。然后,您可以运行add-migration命令,该命令将使用' AddColumn'生成迁移文件。 ' Up'中的方法方法。之后,添加显式SQL命令以将所有值更新为所需的默认值。如果您需要将列向下移动为NOT NULL,则需要另一个SQL命令来修改该列并将其设置为NOT NULL。
public override void Up()
{
AddColumn("MTA.PLAN_SHEETS", "QUANTITY_CHANGED", c => c.Decimal(precision: 3, scale: 0));
Sql("UPDATE MTA.PLAN_SHEETS SET QUANTITY_CHANGED = 1");
Sql("ALTER TABLE MTA.PLAN_SHEETS MODIFY QUANTITY_CHANGED NOT NULL");
}
我希望这会有所帮助。如果需要,请参考我的问题:How do I set a default value for a new column using EF6 migrations?