Zmieniłem nazwy kilku jednostek i ich właściwości nawigacyjnych i wygenerowałem nową migrację w EF 5. Jak zwykle w przypadku zmian nazw w migracjach EF, domyślnie zamierzałem porzucić obiekty i je odtworzyć. Nie tego chciałem, więc prawie musiałem zbudować plik migracji od zera.
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");
}
Wszystko, co próbuję zrobić, to zmienić nazwę dbo.ReportSections
na, dbo.ReportPages
a następnie dbo.ReportSectionGroups
na dbo.ReportSections
. Następnie muszę zmienić nazwę kolumny klucza obcego dbo.ReportPages
z Group_Id
na Section_Id
.
Porzucam klucze obce i indeksy łączące tabele, potem zmieniam nazwy tabel i kolumny klucza obcego, a następnie ponownie dodaję indeksy i klucze obce. Zakładałem, że to zadziała, ale pojawia się błąd SQL.
Msg 15248, poziom 11, stan 1, procedura sp_rename, wiersz 215 albo parametr @objname jest niejednoznaczny, albo żądany @objtype (COLUMN) jest nieprawidłowy. Msg 4902, poziom 16, stan 1, wiersz 10 Nie można znaleźć obiektu „dbo.ReportSections”, ponieważ nie istnieje lub nie masz uprawnień.
Nie mam łatwo dowiedzieć się, co jest nie tak. Każdy wgląd byłby niezwykle pomocny.