J'ai renommé quelques entités et leurs propriétés de navigation et généré une nouvelle migration dans EF 5. Comme d'habitude avec les renommages dans les migrations EF, par défaut, il allait supprimer des objets et les recréer. Ce n'est pas ce que je voulais, alors j'ai à peu près dû créer le fichier de migration à partir de zéro.
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");
}
Tout ce que je suis en train de faire est de renommage dbo.ReportSections
à dbo.ReportPages
puis dbo.ReportSectionGroups
à dbo.ReportSections
. Ensuite, je dois renommer la colonne de clé étrangère dbo.ReportPages
de Group_Id
à Section_Id
.
Je laisse tomber les clés étrangères et les index reliant les tables ensemble, puis je renomme les tables et la colonne de clé étrangère, puis j'ajoute à nouveau les index et les clés étrangères. J'ai supposé que cela allait fonctionner mais j'obtiens une erreur SQL.
Msg 15248, niveau 11, état 1, procédure sp_rename, ligne 215 Soit le paramètre @objname est ambigu, soit le @objtype (COLUMN) déclaré est erroné. Msg 4902, niveau 16, état 1, ligne 10 Impossible de trouver l'objet «dbo.ReportSections» car il n'existe pas ou vous ne disposez pas des autorisations.
Je n'ai pas le temps de comprendre ce qui ne va pas ici. Toute idée serait extrêmement utile.