首页 > 解决方案 > 先应用迁移实体框架代码后更改外键约束

问题描述

我需要向外键添加“级联删除”约束。

创建外键的迁移是最后一次。

CreateTable(
   "dbo.DependentTable",
   c => new
   {
       ID = c.Int(nullable: false),
       SomeValue = c.Double(nullable: false),
   })
   .PrimaryKey(t => t.ID)
   .ForeignKey("dbo.IndependentTable", t => t.IndependentTableId)
   .Index(t => t.ID);

我只需要更改此行并重新“更新数据库”。

.ForeignKey("dbo.IndependentTable", t => t.IndependentTableId, cascadeDelete: true)

我试图做的事情:

  1. Down()在方法中注释代码以避免丢失表和其中的数据。

    • 回滚到以前的迁移。
    • 改变线路。
    • update-database

    但我不断收到错误

    已经有一个名为“dbo.DependentTable”的对象

  2. 生成新的迁移-IgnoreChanges

    • 调用这些方法:

      DropForeignKey("dbo.DependentTable", "ID");
      AddForeignKey("dbo.DependentTable","ID","IndependentTable",cascadeDelete: true)
      
    • Update-database

    这也导致了错误

    数据库中已经有一个名为“FK_dbo.DependentTable_dbo.IndependentTable_Id”的对象。无法创建约束或索引。请参阅以前的错误。

有没有办法在不丢失任何数据的情况下将级联删除添加到外键?

标签: c#entity-frameworkentity-framework-6ef-code-first

解决方案


推荐阅读