使用迁移

时间:2015-04-22 12:35:15

标签: c# entity-framework ef-migrations

这里我使用EF6迁移了CodeFirst

public override void Up()
{
    CreateTable(
        "dbo.MyTable",
        c => new
            {
                Id = c.Int(nullable: false, identity: true),
                Date = c.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()"),
            })
        .PrimaryKey(t => t.Id);
}

但我们发现Date无法在插入时自定义。因此,我们需要迁移才能删除defaultValueSql列上的Date参数。

我尝试使用AlterColumn而没有defaultValueSql参数

public override void Up()
{
    AlterColumn("dbo.MyTable", "Date", c => c.DateTime(nullable: false));
}

public override void Down()
{
    AlterColumn("dbo.MyTable", "Date", c => c.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()"));
}

它既不用于插入和更新Date,也不用于表的定义。

CREATE TABLE [dbo].[MyTable] (
    [Id] INT      IDENTITY (1, 1) NOT NULL,
    [Date]        DATETIME        DEFAULT (getutcdate()) NOT NULL,
);

有人遇到过这种情况吗?

2 个答案:

答案 0 :(得分:2)

实际上,在数据库中,为Constraint创建了defaultValueSql,我认为此参数适用于 sys 表,而不是{{1} },这导致我的MyTable无效。

最后,我为我的目的创建了一些原始SQL命令,如下所示:

AlterColumn

分享希望这对其他人有帮助。

答案 1 :(得分:1)

分两个阶段尝试:

public override void Up()
{
    AlterColumn("dbo.MyTable", "Date", c => c.DateTime(nullable: true,
                                                       defaultValue: "NULL"));
    AlterColumn("dbo.MyTable", "Date", c => c.DateTime(nullable: false));
}