Как инициализировать новый столбец - PullRequest
1 голос
/ 27 марта 2020

Я использую EF Core для взаимодействия с SQL Сервером. Предположим, я добавляю новое свойство, допускающее значение NULL, к существующей сущности (т. Е. Новый столбец, допускающий значение NULL, к существующей таблице). Как получить миграцию, чтобы установить для вновь добавленного столбца значение по умолчанию, отличное от NULL, в строках EXISTING в таблице?

Предположим, я добавил в свою модель свойство int?. В код миграции скаффолдинга я могу добавить аргумент defaultValue, например:

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

, но, как объяснено в в этом сообщении ,

Имейте в виду, что если столбец имеет значение NULL, то значение NULL будет использоваться для существующих строк

И, на самом деле, простой эксперимент показывает, что вновь добавленный столбец имеет значение NULL в существующие строки в базе данных.

1 Ответ

2 голосов
/ 27 марта 2020

Вы можете вызвать пользовательский SQL во время миграции:

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

Обратите внимание: этот код и запрос не проверены! Измените его соответствующим образом.

...