【问题标题】:Changing Primary Key using Entity Framework Core Migrations使用实体框架核心迁移更改主键
【发布时间】:2017-10-03 13:36:59
【问题描述】:

我正在尝试通过 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.

如何更新数据库?

【问题讨论】:

  • 我认为迁移不支持这种特殊场景。你必须自己编程。
  • 如果你先删除列怎么办? migrationBuilder.DropColumn(名称:“Id”,架构:“dbo”,表:“权限”); migrationBuilder.DropPrimaryKey(name: "PK_Permissions", table: "Permissions");

标签: primary-key entity-framework-core entity-framework-migrations


【解决方案1】:

我找到了解决方案: 这似乎是 EF Core 1.1 中的一个错误

我更改了迁移文件。

更多信息可以在这里找到:https://thisworksonmymachine.com/2017/02/13/ef-core-the-setup-part-4/

【讨论】:

  • 只有在还没有对主键的引用时才有效。
  • @GertArnold 是的,如果引用了主键,您需要删除所有外键并重新添加它们,这很痛苦,但它有效
  • 链接似乎已失效。请你更新你的答案来解释你做了什么。谢谢
  • 链接已失效。你能更新你的答案吗?
【解决方案2】:

操纵迁移总是一个冒险的想法...... 如果可能,最简单的方法是清洁石板: 从 DBContext 中取出表(这将删除表) 创建迁移和更新数据库 在上下文中恢复表并进行更改。 创建迁移和更新数据库。

显然,您需要考虑数据的备份和恢复以及约束...

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 你很幸运。我在 2.2.4,最新版本 2.2 上遇到此错误 - 并且没有更新(
    【解决方案4】:

    以下不是适合所有人的解决方案。即,如果您在多个环境中建立了数据库。

    如果您不关心迁移,只需从头开始删除所有迁移即可。然后用你的新模式重新创建第一个。应该可以正常工作。

    【讨论】:

    • 当您在另一个环境中拥有现有数据库时,这并不总是一种选择。
    • 就像我说的“如果你不关心你过去的迁移”
    猜你喜欢
    • 2020-06-21
    • 2021-06-27
    • 2021-09-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    相关资源
    最近更新 更多