147 votes

Migrations Entity Framework : renommer des tables et des colonnes

J'ai renommé quelques entités et leurs propriétés de navigation et j'ai généré une nouvelle migration dans EF 5. Comme d'habitude avec les renommages dans les migrations EF, par défaut, les objets allaient être abandonnés et recréés. Ce n'est pas ce que je voulais, j'ai donc dû construire 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 j'essaie de faire est de renommer dbo.ReportSections à dbo.ReportPages et ensuite dbo.ReportSectionGroups à dbo.ReportSections . Ensuite, je dois renommer la colonne de la clé étrangère sur dbo.ReportPages de Group_Id à Section_Id .

Je supprime les clés étrangères et les index qui relient les tables entre elles, puis je renomme les tables et la colonne de clé étrangère, puis je rajoute les index et les clés étrangères. Je pensais que cela allait fonctionner, mais je reçois une erreur SQL.

Msg 15248, Niveau 11, Etat 1, Procédure sp_rename, Ligne 215 Soit le paramètre @objname est ambigu, soit le @objtype (COLUMN) revendiqué est incorrect. Msg 4902, Niveau 16, Etat 1, Ligne 10 Impossible de trouver l'objet "dbo.ReportSections" car il n'existe pas ou vous n'avez pas les autorisations nécessaires.

Je n'arrive pas à comprendre ce qui ne va pas ici. Tout commentaire serait extrêmement utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X