Elu*_*FTW 37 .net c# entity-framework ef-migrations entity-framework-6
我使用EF6 report
在我的数据库中存储该类的实例.数据库已包含数据.说我想添加一个属性report
,
public class report {
// ... some previous properties
// ... new property:
public string newProperty{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我转到包管理器控制台并执行
add-migration Report-added-newProperty
update-database
Run Code Online (Sandbox Code Playgroud)
我将在'/ Migrations'文件夹中获取一个文件,newProperty
向表中添加一列.这很好用.但是,对于数据库中较旧的条目,该值newProperty
现在为空字符串.但我希望它是,例如,"老".
所以我的问题是:如何在迁移脚本(或其他地方)中为新属性(任何类型)设置默认值?
Ham*_*jam 63
如果您看到生成的迁移代码,您将看到 AddColumn
AddColumn("dbo.report", "newProperty", c => c.String(nullable: false));
Run Code Online (Sandbox Code Playgroud)
你可以加 defaultValue
AddColumn("dbo.report", "newProperty",
c => c.String(nullable: false, defaultValue: "old"));
Run Code Online (Sandbox Code Playgroud)
或者添加 defaultValueSql
AddColumn("dbo.report", "newProperty",
c => c.String(nullable: false, defaultValueSql: "GETDATE()"));
Run Code Online (Sandbox Code Playgroud)
Vic*_* LG 12
希望它可以帮助某人。将先前答案中的所有内容放在一起(使用布尔属性的示例):
1) 向实体添加新属性。
/// <summary>
/// Determines if user is enabled or not. Default value is true
/// </summary>
public bool IsEnabled { get; set; }
Run Code Online (Sandbox Code Playgroud)
2) 运行以下命令以在迁移中添加新更改。
add-migration addIsEnabledColumn
Run Code Online (Sandbox Code Playgroud)
3)从上面的命令创建一个迁移文件,打开该文件。
4) 设置默认值。
public override void Up()
{
AddColumn(
"dbo.AspNetUsers",
"IsEnabled",
c => c.Boolean(
nullable: false,
defaultValue: true
)
);
}
Run Code Online (Sandbox Code Playgroud)
您必须更改迁移脚本中的行,该行添加属性/列,如下所示:
AddColumn("dbo.reports", "newProperty", c => c.String(nullable: false, defaultValue: "test"));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24878 次 |
最近记录: |