Code-first迁移:如何为新属性设置默认值?
Code-first迁移:如何为新属性设置默认值?
我正在使用EF6将report
类的实例保存在数据库中。数据库中已经包含了数据。假如我想要给report
添加一个属性,
public class report { // ... some previous properties // ... new property: public string newProperty{ get; set; } }
现在,如果我去包管理器控制台并执行
add-migration Report-added-newProperty update-database
我将在\'/Migrations\'文件夹中得到一个添加newProperty
列到表中的文件。这个很好。然而,在旧的数据库条目中,newProperty
的值现在为空字符串。但我想让它是例如“old”。
因此,我的问题是:如何在迁移脚本(或其他地方)为新属性(任何类型)设置默认值?
admin 更改状态以发布 2023年5月21日
希望能对某些人有所帮助。将之前的回答整合在一起(使用布尔属性的示例):
1)向实体添加新属性。
////// Determines if user is enabled or not. Default value is true /// public bool IsEnabled { get; set; }
2)运行下面的命令,将新变更添加到迁移中。
add-migration addIsEnabledColumn
3)从上面的命令中创建一个迁移文件,打开该文件。
4)设置默认值。
public override void Up() { AddColumn( "dbo.AspNetUsers", "IsEnabled", c => c.Boolean( nullable: false, defaultValue: true ) ); }
如果您查看生成的迁移代码,您将看到AddColumn
。
AddColumn("dbo.report", "newProperty", c => c.String(nullable: false));
您可以添加defaultValue
。
AddColumn("dbo.report", "newProperty", c => c.String(nullable: false, defaultValue: "old"));
或添加defaultValueSql
。
AddColumn("dbo.report", "newProperty", c => c.String(nullable: false, defaultValueSql: "GETDATE()"));