C# 如何初始化新列

C# 如何初始化新列,c#,entity-framework,entity-framework-6,entity-framework-core,C#,Entity Framework,Entity Framework 6,Entity Framework Core,我正在使用EF Core与SQL Server进行接口。假设我向现有实体添加一个新的可空属性(即,向现有表添加一个新的可空列)。如何让迁移将新添加的列设置为表中现有行中的默认非空值 假设我在模型中添加了一个int?属性。在搭建的迁移代码中,我可以添加一个defaultValue参数,如下所示: migrationBuilder.AddColumn<int?>( name: "MyNullableInt", table:

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

假设我在模型中添加了一个
int?
属性。在搭建的迁移代码中,我可以添加一个
defaultValue
参数,如下所示:

        migrationBuilder.AddColumn<int?>(
            name: "MyNullableInt",
            table: "MyTable",
            nullable: true,
            defaultValue: 0); // Manually added this argument
migrationBuilder.AddColumn(
名称:“MyNullableInt”,
表格:“MyTable”,
可为空:是的,
默认值:0);//手动添加此参数
但是,如中所述

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


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

您可以在迁移过程中调用自定义SQL:

migrationBuilder.AddColumn<int?>(...)
migrationBuilder.Sql("UPDATE [dbo].[MyTable] SET [MyNullableInt] = 0");
migrationBuilder.AddColumn(…)
Sql(“更新[dbo].[MyTable]集[MyNullableInt]=0”);
请注意:此代码和查询未经测试!适当地修改它