如何初始化新列

 收藏

我正在使用EF Core与SQL Server进行接口。假设我将一个新的可为空的属性添加到现有实体(即,将一个新的可为空的列添加到现有表)。如何进行迁移以将表中现有行中新添加的列设置为默认的非空值?

Suppose I add an int? property to my model. In the scaffolded migration code, I can add a defaultValue argument, like this:

        migrationBuilder.AddColumn<int?>(
            name: "MyNullableInt",
            table: "MyTable",
            nullable: true,
            defaultValue: 0); // Manually added this argument

but, as explained in this SO post,

请记住,如果该列可为空,则null将为   用于现有行的值

而且,实际上,一个简单的实验表明,新添加的列在数据库中的现有行中的值为NULL。

回复
  • 您可以在迁移期间调用自定义SQL:

    migrationBuilder.AddColumn<int?>(...)
    migrationBuilder.Sql("UPDATE [dbo].[MyTable] SET [MyNullableInt] = 0");
    

    请注意:此代码和查询未经测试!对其进行适当的修改。