Code-first migration: How to set default value for new property?
我使用EF6在数据库中存储
1 2 3 4 5 6 | public class report { // ... some previous properties // ... new property: public string newProperty{ get; set; } } |
现在,如果我转到包管理器控制台并执行
1 2 | add-migration Report-added-newProperty update-database |
号
我将在'/migrations'文件夹中得到一个文件,将
所以我的问题是:如何在迁移脚本(或其他地方)中为新属性(任何类型)设置默认值?
如果您看到生成的迁移代码,您将看到
1 | AddColumn("dbo.report","newProperty", c => c.String(nullable: false)); |
您可以添加EDOCX1[1]
1 2 | AddColumn("dbo.report","newProperty", c => c.String(nullable: false, defaultValue:"old")); |
号
或增加
1 2 | AddColumn("dbo.report","newProperty", c => c.String(nullable: false, defaultValueSql:"GETDATE()")); |
您必须更改迁移脚本中添加如下属性/列的行:
1 | AddColumn("dbo.reports","newProperty", c => c.String(nullable: false, defaultValue:"test")); |
。
希望它能帮助别人。将以前的答案中的所有内容放在一起(例如使用布尔属性):
1)向实体添加新属性。
1 2 3 4 | /// <summary> /// Determines if user is enabled or not. Default value is true /// </summary> public bool IsEnabled { get; set; } |
。
2)运行下面的命令以添加迁移中的新更改。
1 | add-migration addIsEnabledColumn |
。
3)从上面的命令创建迁移文件,打开该文件。
。
4)设置默认值。
1 2 3 4 | public override void Up() { AddColumn("dbo.AspNetUsers","IsEnabled", c => c.Boolean(nullable: false, defaultValue: true)); } |
我发现仅仅在实体属性上使用自动属性初始值设定项就足以完成任务。
例如:
1 2 3 | public class Thing { public bool IsBigThing { get; set; } = false; } |