使用Entity Framework Core迁移更改主键

6

我正在尝试通过Entity Framework Core Migrations更改表的主键:

protected override void Up(MigrationBuilder migrationBuilder)
{
        migrationBuilder.DropPrimaryKey(
            name: "PK_Permissions",
            table: "Permissions");
}

当我尝试更新数据库时,出现以下错误信息:
To change the IDENTITY property of a column, the column needs to be dropped and recreated.

如何更新数据库?


2
我认为迁移不支持这种特殊情况。你必须自己编程。 - Gert Arnold
1
如果您首先删除列会怎样呢?migrationBuilder.DropColumn( name: "Id", schema: "dbo", table: "Permissions"); migrationBuilder.DropPrimaryKey( name: "PK_Permissions", table: "Permissions"); - alessalessio
4个回答

2

6
只有在没有引用主键的情况下才能起作用。 - Gert Arnold
@GertArnold 如果主键被引用,您需要删除所有外键并重新添加它们,这很麻烦,但它可以解决问题。 - Omar Mneimneh
2
链接似乎已经失效。请您更新您的回答并解释您所做的事情。谢谢。 - Avrohom Yisroel
2
链接已失效。请更新您的答案。 - ElectricRouge
网络档案馆有一份拷贝:http://web.archive.org/web/20170214123452/https://thisworksonmymachine.com/2017/02/13/ef-core-the-setup-part-4/ - ghosttie

2
以下方案并不适用于所有人。如果你在多个环境中有一个已经建立好的数据库,那么请忽略此方案。
如果你不关心迁移,可以直接从头开始,删除所有迁移记录,然后使用新模式重新创建第一个迁移记录。这样应该就可以正常运行了。

当您在另一个环境中拥有现有数据库时,这并不总是一个选项。 - bytebender
就像我所说的,“如果您不关心过去的迁移”。 - Isaac Adams

2

我尝试获取IdentityServer4 EF迁移(SQLServer),遇到了同样的问题。将Microsoft.EntityFrameworkCore更新到v2.1.3,将Microsoft.EntityFrameworkCore.Tools更新到v2.1.3似乎可以解决该问题。


你很幸运,我在2.2.4的最新版本上遇到了这个错误,并且还没有更新。 - A K

2

操纵迁移总是一个冒险的想法......如果可能的话,最简单的方法是清空所有内容:

从DBContext中取出表格(这将删除该表)

创建迁移并更新数据库

在上下文中恢复表并进行更改。

创建迁移并更新数据库。

显然,您需要考虑备份和还原数据以及约束条件......


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接