2

別のテーブルへのオプションの 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; }
}
4

0 に答える 0