Code-first迁移:如何为新属性设置默认值?

23 浏览
0 Comments

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日
0
0 Comments

希望能对某些人有所帮助。将之前的回答整合在一起(使用布尔属性的示例):

1)向实体添加新属性。

/// 
/// Determines if user is enabled or not. Default value is true
/// 
public bool IsEnabled { get; set; }

2)运行下面的命令,将新变更添加到迁移中。

add-migration addIsEnabledColumn

3)从上面的命令中创建一个迁移文件,打开该文件。

enter image description here

4)设置默认值。

public override void Up()
{
        AddColumn(
            "dbo.AspNetUsers", 
            "IsEnabled", 
            c => c.Boolean(
                nullable: false, 
                defaultValue: true
            )
        );
}

0
0 Comments

如果您查看生成的迁移代码,您将看到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()"));

0