別のテーブルへのオプションの FK を持つテーブルがあり、その FK を必要な関係に変更したいと考えています。
自動移行を有効にして、この更新プログラムの破壊的な変更を有効にしました。データベース内のすべてのエンティティにも、このキーが設定されています。
私はこれを変更しました:
modelBuilder.Entity<Blog>().HasOptional(b => b.AuthorSecurable).WithMany().Map(b => b.MapKey("AuthorSecurableId"));
に:
modelBuilder.Entity<Blog>().HasRequired(b => b.AuthorSecurable).WithMany().Map(b => b.MapKey("AuthorSecurableId"));
次のエラーが発生しました:
「FK_dbo.Blogs_dbo.Securables_AuthorSecurableId」は制約ではありません。制約を削除できませんでした。以前のエラーを参照してください。
私が見ることができる以前のエラーはありません(内部例外などはありません)。
この投稿では、次の方法でこのエラーを回避できると書かれています。
ALTER TABLE [dbo].[Blogs] NOCHECK CONSTRAINT [FK_dbo.Blogs_dbo.Securables_AuthorSecurable_Id]
だから私はした:
public override void Up()
{
Sql("ALTER TABLE [dbo].[Blogs] NOCHECK CONSTRAINT [FK_dbo.Blogs_dbo.Securables_AuthorSecurable_Id]");
DropForeignKey("dbo.Blogs", "AuthorSecurableId", "dbo.Securables");
DropIndex("dbo.Blogs", new[] { "AuthorSecurableId" });
AlterColumn("dbo.Blogs", "AuthorSecurableId", c => c.Int(nullable: false));
AddForeignKey("dbo.Blogs", "AuthorSecurableId", "dbo.Securables", "Id", cascadeDelete: true);
CreateIndex("dbo.Blogs", "AuthorSecurableId");
}
しかし、それでも同じエラーが発生しました
編集:
完全なコードはここで入手でき、最小限のモデルは以下のとおりです。
public class Blog
{
public int Id { get; set; }
public Securable AuthorSecurable { get; set; }
}
public class Securable
{
public int Id { get; set; }
}