【发布时间】:2021-05-01 10:38:31
【问题描述】:
我已经尝试研究了几个小时,没有很多好的文档和示例,我希望有人可以提供更好的理解。
我有一个正在使用实体框架迁移的数据库表。该数据库的先前版本使用“INT32”作为表的主键。作为一个团队,我们决定与其尝试为大型数据库管理此问题,不如将我们可以持有的 ID 数量扩大为 BIGINT。
我创建了一个新的迁移并尝试更新表以现在保存 BIGINT 值。
这是我用来更改此迁移的代码:
DropForeignKey("parts", "FK_Parts_Bins_BinID");
AlterColumn("bins", "ID", c => c.Long(nullable: false, identity: true));
AlterColumn("parts", "BinID", c => c.Long());
AddForeignKey("parts", "BinID", "bins", "ID", false, "FK_Parts_Bins_BinID");
我有一个标为“Parts”的表,其中包含对“Bins”表中主键“ID”的外键引用。以前这些只是整数,现在我想使用 BigINT。
我相信我有两个问题:
-
我无法重新建立 Bins 和 Parts 之间的连接,因为当我创建新的“identity”列时,bins ID 字段被标记为“unsigned”,而我的 parts BinID 列没有。所以我得到以下异常:
外键约束“FK_Parts_Bins_BinID”中的引用列“BinID”和引用列“ID”不兼容。
我不知道如何使我的 BinID 列无符号。
- 我相信在修复上述异常后,我可能会遇到自动增量字段重置为 0 或 1 的问题。这意味着现有数据 ID 不会被考虑在内。是否有将起始位置更新为现有表中最大 ID 的最佳做法?
微软文档:
【问题讨论】:
标签: c# mysql entity-framework