У меня проблема с обновлением базы данных с помощью миграции, которая добавляет столбец в таблицу и присваивает ей значения.Я сократил проблему до очень простого случая.
Вот модель:
public class Model
{
public int Id { get; set; }
public int Col2 { get; set; }
}
Это контекст:
public class Context : DbContext
{
public DbSet<Model> Models { get; set; }
}
Сначала я включил миграции,создал первоначальную миграцию и создал базу данных.
PM> Enable-Migrations
PM> Add-Migration -Name Initial
PM> Update-Database
Затем я расширил свою модель:
public int Col3 { get; set; }
и создал новую миграцию:
PM> Add-Migration -Name AddedCol3
Iизменил эту миграцию, чтобы обновить значения в Col3, см. вызов Sql ():
public override void Up()
{
AddColumn("dbo.Models", "Col3", c => c.Int(nullable: false));
Sql("update dbo.Models set Col3 = Col2");
}
public override void Down()
{
DropColumn("dbo.Models", "Col3");
}
Когда я обновляю базу данных этой миграцией, я получаю:
Msg 207, Уровень 16, Состояние 1, Строка 2 Неверное имя столбца 'Col3'.
Сгенерированный сценарий:
ALTER TABLE [dbo].[Models] ADD [Col3] [int] NOT NULL DEFAULT 0
update dbo.Models set Col3 = Col2
-- Removed update to migration history.
Очевидно, что SQL Server не может обработать таблицу изменений и обновитьв одной партии.
Я попытался добавить SQL("GO");
между ними, но это приводит к ошибке:
Аргумент 'sql' не может быть нулевым, пустым или содержать только белыйпробел.
при попытке обновления.
Как использовать миграции для достижения этой цели.Я хочу, чтобы методы Up () и Down () постоянно обновляли базу данных.