Я пытаюсь использовать CF для построения модели существующей базы данных. У меня есть столбец, в котором я забыл установить нормальное значение по умолчанию. И вместо того, чтобы нарушить чистоту первоначальной миграции, изменив ее, я просто решил создать еще одну миграцию (, для чего нужны миграции, верно?:)
public override void Up()
{
AlterColumn("Config", "DefaultTaxPerDollar", c => c.Decimal(nullable: false, precision: 19, scale: 5, defaultValue: 0.087m));
}
public override void Down()
{
AlterColumn("Config", "DefaultTaxPerDollar", c => c.Decimal(nullable: false, precision: 19, scale: 5, defaultValue: 0.0m));
}
Но это приводит к ошибке Column already has a DEFAULT bound to it.
от SQL Server.
Как изменить значение по умолчанию с помощью миграции CF? Или как можно просто удалить значение по умолчанию (и впоследствии повторно -создать его с другим значением )?
Изменить:
Вот сгенерированный SQL:
ALTER TABLE [Config] ADD CONSTRAINT DF_DefaultTaxPerDollar DEFAULT 0.087 FOR [DefaultTaxPerDollar]
ALTER TABLE [Config] ALTER COLUMN [DefaultTaxPerDollar] [decimal](19, 5) NOT NULL
Я думаю, что, возможно, нашел решение, чтобы использовать метод Sql()
с некоторым сложным SQL, вдохновленным этим сообщением. Проблема связана с тем, что SQL Server использует ограничения для реализации значений по умолчанию (О! как я скучаю по MySQL! )со сгенерированным именем ограничения. Таким образом, команда Code First не могла просто изменить или удалить/повторно -создать значение по умолчанию.