Как добавить новый столбец в существующую таблицу и установить его значение на основе существующего столбца с помощью EF-миграций - PullRequest
0 голосов
/ 11 февраля 2019

Например, есть таблица со значениями:

Id CarModel
1  Passat
2  Land Cruiser

И нужно добавить необнуляемый столбец Производитель.Начальные значения для производителя (для существующих записей) должны быть:

For CarModel=Passat - VW 
For CarModel=Land Cruiser - Toyota
etc.

Моя миграция:

protected override void Up(MigrationBuilder migrationBuilder)
{
  migrationBuilder.AddColumn<string>(
  name: "Manufacturer",
  table: "Cars",
  nullable: false);
}

Как я могу это сделать?

1 Ответ

0 голосов
/ 12 февраля 2019

Нет действительно хорошего способа сделать это.Вам необходимо отредактировать созданную миграцию вручную следующим образом:

  1. Измените команду AddColumn, чтобы изначально создать столбец с nullable, установленным на true (т. Е. необязательно ).
  2. Заполните столбец с помощью метода Sql и необработанных команд SQL.
  3. Добавьте команду AlterColumn, чтобы изменить столбец nullable на предполагаемый false (т. Е. требуется ).

Примерно так:

protected override void Up(MigrationBuilder migrationBuilder)
{
    migrationBuilder.AddColumn<string>(
        name: "Manufacturer",
        table: "Cars",
        nullable: true);

    migrationBuilder.Sql(
@"UPDATE Cars SET Manufacturer = CASE CarModel
  WHEN 'Passat' THEN 'VW'
  WHEN 'Land Cruiser' THEN 'Toyota'
  ELSE 'Other' END");

    migrationBuilder.AlterColumn<string>(
        name: "Manufacturer",
        table: "Cars",
        nullable: false,
        oldClrType: typeof(string),
        oldNullable: true);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...