いくつかのエンティティとそのナビゲーション プロパティの名前を変更し、EF 5 で新しい移行を生成しました。EF 移行での名前の変更ではよくあることですが、既定では、オブジェクトを削除して再作成します。それは私が望んでいたことではないので、移行ファイルを最初から作成する必要がありました。
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");
}
私がやろうとしているのは、名前を に変更dbo.ReportSections
してから にdbo.ReportPages
変更dbo.ReportSectionGroups
することだけですdbo.ReportSections
。次に、外部キー列の名前を から に変更する必要がdbo.ReportPages
ありGroup_Id
ますSection_Id
。
テーブルをリンクする外部キーとインデックスを削除し、テーブルと外部キー列の名前を変更してから、インデックスと外部キーを再度追加しています。これでうまくいくと思っていましたが、SQL エラーが発生しました。
メッセージ 15248、レベル 11、状態 1、プロシージャ sp_rename、行 215 パラメータ @objname があいまいであるか、要求された @objtype (COLUMN) が間違っています。メッセージ 4902、レベル 16、状態 1、行 10 オブジェクト "dbo.ReportSections" が存在しないか、権限がないため、見つかりません。
ここで何が問題なのかを理解するのは簡単ではありません。どんな洞察も非常に役に立ちます。