猿问

默认值在实体框架代码优先迁移中不起作用

我偶然发现了一个与实体框架相关的问题,但尚未找到任何答案。当我尝试在使用代码优先迁移时添加或更改列并为此列设置默认值时,可以使用defaultValueand和/或defaultValueSql参数。


官方的MSDN文档写道:

ColumnModel.DefaultValue:

获取或设置一个常数值,用作此列的默认值。

ColumnModel.DefaultValueSql:

获取或设置一个SQL表达式,用作此列的默认值。


由于关于stackoverflow的与默认值相关的不同问题使用不同的方法,因此有人可以告诉我何时使用一种或另一种吗?


对于我的特定用例,我想为数据库列设置一个恒定值4,如下所示:


public override void Up()

{

    this.AddColumn("dbo.Foo", "Bar", c => c.Int(nullable: false, defaultValue: 4));

}

结果如下:

尽管这看起来绝对正确,但是数据行的所有值都设置为零... anyone有人知道吗,为什么?


 Blazevicius声明不会自动应用默认值,因此我尝试将以下代码添加到我的Configuration班级:


internal sealed class MigrationConfiguration : DbMigrationsConfiguration<DatabaseContext>

{

    protected override void Seed(DatabaseContext context)

    {

        context.Database.ExecuteSqlCommand("UPDATE [dbo].[Foo] SET [Bar] = 4");

    }

}

但这也不起作用。你们知道我在添加新列后如何设置默认值吗?


aluckdog
浏览 161回答 1
1回答

三国纷争

将新列添加到现有表时,不会为现有记录追溯添加默认值。您可以Add-Migration RunSqlScript用来添加新的迁移步骤,并使用自定义Sql更新新列中的值。
随时随地看视频慕课网APP
我要回答