代码首次迁移中的列的EF6 Oracle默认值

时间:2016-02-04 15:51:02

标签: oracle ef-code-first entity-framework-6 ef-migrations

我正在尝试编写一个迁移,使用 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,并且再次没有设置列的默认值。
我的迁移代码有什么问题吗?

1 个答案:

答案 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?