Entity framework 使用自动迁移将可选FK更新为必需

Entity framework 使用自动迁移将可选FK更新为必需,entity-framework,ef-code-first,entity-framework-migrations,Entity Framework,Ef Code First,Entity Framework Migrations,我有一个表,其中有一个可选的FK到另一个表,并希望将该FK更改为所需的关系 我已为此更新启用自动迁移和破坏性更改。数据库中的所有实体也填充了此密钥 我改变了这一点: modelBuilder.Entity<Blog>().HasOptional(b => b.AuthorSecurable).WithMany().Map(b => b.MapKey("AuthorSecurableId")); 所以我做了: public override void Up() {

我有一个表,其中有一个可选的FK到另一个表,并希望将该FK更改为所需的关系

我已为此更新启用自动迁移和破坏性更改。数据库中的所有实体也填充了此密钥

我改变了这一点:

modelBuilder.Entity<Blog>().HasOptional(b => b.AuthorSecurable).WithMany().Map(b => b.MapKey("AuthorSecurableId"));
所以我做了:

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; }
}

卢克,你能发布完整的(最低限度的)相关模型吗specific@NSGaga我已经按要求发布了最少的模型,所有的代码都可以在github上找到(请参阅文章中的链接),您可以直接在SQLServerManagementStudio中编写所需的操作脚本。Ie确认了需要什么alter语句以及顺序是什么?@soadyp no我希望能够通过EF迁移实现这一点。我相信我可以用原始SQL进行这一改变,但这是最后一条新闻。运气好吗?
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; }
}