【问题标题】:EF6 Oracle default value for a column in code first migration代码优先迁移中列的 EF6 Oracle 默认值
【发布时间】:2016-05-14 07:54:28
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我在使用 Oracle 和 EF6 时遇到了同样的问题。 Oracle 提供商似乎不支持它。不过有一个解决方法,以防您还没有找到。

    您首先需要在您的模型(或 Fluent API,无论您在哪里处理)中将 QuantityChanged 属性设置为可为空。然后您可以运行 add-migration 命令,该命令将使用“Up”方法中的“AddColumn”方法生成迁移文件。之后,添加显式 SQL 命令以将所有值更新为所需的默认值。如果您需要该列不为 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?

    【讨论】:

    • 我确认 oracle 驱动程序 6.122.1.0 确实存在此错误,并且此解决方法有效。奇怪的是 CreateTable 操作似乎没有受到这个错误的影响。 Oracle 的开发人员不知何故记得要尊重那里的“defaultValue”参数,但在其他地方却没有。去图...
    猜你喜欢
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 2016-04-14
    • 2016-05-26
    • 1970-01-01
    相关资源
    最近更新 更多