如何初始化新列

How to initialize new column

我正在使用 EF Core 与 SQL 服务器交互。假设我向现有实体添加一个新的可为空的 属性(即向现有的 table 添加一个新的可为空的列)。如何让迁移将新添加的列设置为 table 中现有行中的默认非空值?

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

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

但是,如 this SO post 中所述,

Keep in mind that if the column is nullable, then null will be the value used for existing rows

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

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

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

请注意:此代码和查询未经测试!酌情修改。