为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
aluckdog 2021-05-03 10:10:15
我偶然发现了一个与实体框架相关的问题,但尚未找到任何答案。当我尝试在使用代码优先迁移时添加或更改列并为此列设置默认值时,可以使用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");    }}但这也不起作用。你们知道我在添加新列后如何设置默认值吗?
查看完整描述

1 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

将新列添加到现有表时,不会为现有记录追溯添加默认值。

您可以Add-Migration RunSqlScript用来添加新的迁移步骤,并使用自定义Sql更新新列中的值。


查看完整回答
反对 回复 2021-05-08
  • 1 回答
  • 0 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信