Cambié el nombre de un par de entidades y sus propiedades de navegación y generé una nueva migración en EF 5. Como es habitual con los cambios de nombre en las migraciones de EF, por defecto iba a soltar objetos y recrearlos. Eso no es lo que quería, así que tuve que crear el archivo de migración desde cero.
public override void Up()
{
DropForeignKey("dbo.ReportSectionGroups", "Report_Id", "dbo.Reports");
DropForeignKey("dbo.ReportSections", "Group_Id", "dbo.ReportSectionGroups");
DropForeignKey("dbo.Editables", "Section_Id", "dbo.ReportSections");
DropIndex("dbo.ReportSectionGroups", new[] { "Report_Id" });
DropIndex("dbo.ReportSections", new[] { "Group_Id" });
DropIndex("dbo.Editables", new[] { "Section_Id" });
RenameTable("dbo.ReportSections", "dbo.ReportPages");
RenameTable("dbo.ReportSectionGroups", "dbo.ReportSections");
RenameColumn("dbo.ReportPages", "Group_Id", "Section_Id");
AddForeignKey("dbo.ReportSections", "Report_Id", "dbo.Reports", "Id");
AddForeignKey("dbo.ReportPages", "Section_Id", "dbo.ReportSections", "Id");
AddForeignKey("dbo.Editables", "Page_Id", "dbo.ReportPages", "Id");
CreateIndex("dbo.ReportSections", "Report_Id");
CreateIndex("dbo.ReportPages", "Section_Id");
CreateIndex("dbo.Editables", "Page_Id");
}
public override void Down()
{
DropIndex("dbo.Editables", "Page_Id");
DropIndex("dbo.ReportPages", "Section_Id");
DropIndex("dbo.ReportSections", "Report_Id");
DropForeignKey("dbo.Editables", "Page_Id", "dbo.ReportPages");
DropForeignKey("dbo.ReportPages", "Section_Id", "dbo.ReportSections");
DropForeignKey("dbo.ReportSections", "Report_Id", "dbo.Reports");
RenameColumn("dbo.ReportPages", "Section_Id", "Group_Id");
RenameTable("dbo.ReportSections", "dbo.ReportSectionGroups");
RenameTable("dbo.ReportPages", "dbo.ReportSections");
CreateIndex("dbo.Editables", "Section_Id");
CreateIndex("dbo.ReportSections", "Group_Id");
CreateIndex("dbo.ReportSectionGroups", "Report_Id");
AddForeignKey("dbo.Editables", "Section_Id", "dbo.ReportSections", "Id");
AddForeignKey("dbo.ReportSections", "Group_Id", "dbo.ReportSectionGroups", "Id");
AddForeignKey("dbo.ReportSectionGroups", "Report_Id", "dbo.Reports", "Id");
}
Todo lo que intento hacer es cambiar el nombre dbo.ReportSections
a dbo.ReportPages
y luego dbo.ReportSectionGroups
a dbo.ReportSections
. Entonces necesito cambiar el nombre de la columna de clave externa dbo.ReportPages
de Group_Id
a Section_Id
.
Estoy eliminando las claves externas e índices que unen las tablas, luego cambio el nombre de las tablas y la columna de clave externa, luego agrego los índices y las claves externas nuevamente. Supuse que esto iba a funcionar pero recibo un error de SQL.
Msg 15248, nivel 11, estado 1, procedimiento sp_rename, línea 215 O el parámetro @objname es ambiguo o el @objtype (COLUMN) reclamado es incorrecto. Msg 4902, nivel 16, estado 1, línea 10 No se puede encontrar el objeto "dbo.ReportSections" porque no existe o no tiene permisos.
No me está resultando fácil averiguar qué está mal aquí. Cualquier idea sería tremendamente útil.