Para este mismo problema opté por utilizar una herramienta de migración:Migratordotnet .
Con las migraciones (en cualquier herramienta) tiene una clase simple que se usa para realizar sus cambios y deshacerlos. He aquí un ejemplo:
[Migration(62)]
public class _62_add_date_created_column : Migration
{
public void Up()
{
//add it nullable
Database.AddColumn("Customers", new Column("DateCreated", DateTime) );
//seed it with data
Database.Execute("update Customers set DateCreated = getdate()");
//add not-null constraint
Database.AddNotNullConstraint("Customers", "DateCreated");
}
public void Down()
{
Database.RemoveColumn("Customers", "DateCreated");
}
}
Este ejemplo muestra cómo puede manejar actualizaciones volátiles, como agregar una nueva columna no nula a una tabla que tiene datos existentes. Esto se puede automatizar fácilmente y puede subir y bajar fácilmente entre versiones.
Esta ha sido una adición realmente valiosa a nuestra compilación y ha agilizado el proceso inmensamente. .
Publiqué una comparación de varios marcos de migración en .NET aquí:http ://benscheirman.com/2008/06/net-database-migration-tool-roundup