实体迁移.不能放弃约束.请参阅前面的错误

本文关键字:前面 错误 请参阅 约束 迁移 不能 放弃 实体 | 更新日期: 2023-09-27 17:50:40

下面是产生这个错误的代码。我已经尝试了重命名AddForeignKey的解决方案,但错误是相同的。

PK_dbo。Item'不是约束。
不能放弃约束。见前面的错误。

你能提出一些解决方案吗?

public override void Up()
{
    DropForeignKey("dbo.AddGallery", "item_fk_id", "dbo.Item");
    DropForeignKey("dbo.ExtraFieldValue", "item_fk_id", "dbo.Item");
    DropPrimaryKey("dbo.Item");
    AddColumn("dbo.Item", "id", c => c.Int(nullable: false, identity: true));
    AddPrimaryKey("dbo.Item", "id");
    AddForeignKey("dbo.AddGallery", "item_fk_id", "dbo.Item", "id");
    AddForeignKey("dbo.ExtraFieldValue", "item_fk_id", "dbo.Item", "id");
    DropColumn("dbo.Item", "item_id");
}
public override void Down()
{
    AddColumn("dbo.Item", "item_id", c => c.Int(nullable: false, identity: true));
    DropForeignKey("dbo.ExtraFieldValue", "item_fk_id", "dbo.Item");
    DropForeignKey("dbo.AddGallery", "item_fk_id", "dbo.Item");
    DropPrimaryKey("dbo.Item");
    DropColumn("dbo.Item", "id");
    AddPrimaryKey("dbo.Item", "item_id");
    AddForeignKey("dbo.ExtraFieldValue", "item_fk_id", "dbo.Item", "id");
    AddForeignKey("dbo.AddGallery", "item_fk_id", "dbo.Item", "id");
}

实体迁移.不能放弃约束.请参阅前面的错误

我认为主键已经不存在了,这就是为什么它不能被删除的原因。

我找到了一个解决这个问题的方法。由于我试图更改现有主键名的名称,因此在迁移时遇到了一个错误,因为该主键被引用到其他表。因此,解决方案只是添加[Column("id")] DataAnnotation,然后进行迁移。

更改主键列名成功,没有任何错误。

在我的例子中,我首先使用了来自database"的方法。我有自己的DB外/主键名与迁移期望的不同。所以移民就是找不到这些名字的关系。我必须在drop中明确地命名这些关系:

DropForeignKey(string dependentTable, string name);
DropPrimaryKey(string table, string name);

但是要注意:使用这种方法,您需要显式地修改Up和Down方法。这意味着,如果您不重新定义Down()以匹配新的Up方法(使用以前的FK/PK名称),那么如果您回到迁移,初始Down()将产生具有自己名称的键,Up()将需要在自我修改之前具有初始结构,除非当您再次使用update-database时它不会找到具有此类名称的键。