I have a DB that I created using the OOB database initializer, and I am using Code First with EF 4.3.1.
I wanted to take advantage of the new \"IgnoreChanges\" flag
Ok, based on nemesv's answer (accepted), here's how I ended up fixing the problem for now, until a fix is officially issued:
internal class MyFixedSqlServerMigrationSqlGenerator : SqlServerMigrationSqlGenerator
{
protected override void Generate(AlterColumnOperation alterColumnOperation)
{
if (alterColumnOperation == null)
throw new ApplicationException("alterColumnOperation != null");
ColumnModel column = alterColumnOperation.Column;
if ((column.DefaultValue != null) || !string.IsNullOrWhiteSpace(column.DefaultValueSql))
{
using (IndentedTextWriter writer = Writer())
{
writer.Write("ALTER TABLE ");
writer.Write(this.Name(alterColumnOperation.Table));
writer.Write(" ADD CONSTRAINT DF_");
writer.Write(alterColumnOperation.Table + "_"); // <== THIS IS THE LINE THAT FIXES THE PROBLEM
writer.Write(column.Name);
writer.Write(" DEFAULT ");
writer.Write(column.DefaultValue != null ? base.Generate(column.DefaultValue) : column.DefaultValueSql);
writer.Write(" FOR ");
writer.Write(this.Quote(column.Name));
this.Statement(writer);
}
}
using (IndentedTextWriter writer2 = Writer())
{
writer2.Write("ALTER TABLE ");
writer2.Write(this.Name(alterColumnOperation.Table));
writer2.Write(" ALTER COLUMN ");
writer2.Write(this.Quote(column.Name));
writer2.Write(" ");
writer2.Write(this.BuildColumnType(column));
if (column.IsNullable.HasValue && !column.IsNullable.Value)
{
writer2.Write(" NOT NULL");
}
this.Statement(writer2);
}
}
}
internal sealed class Configuration : DbMigrationsConfiguration
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
SetSqlGenerator("System.Data.SqlClient", new MyFixedSqlServerMigrationSqlGenerator());
}
...
}