6.1将ID从Int改为Long

本文关键字:Int 改为 Long ID | 更新日期: 2023-09-27 18:10:28

我正在开发一个使用ASP的应用程序。Net MVC 4, c#和实体框架代码优先。有一个模型(表)增长相当大,我担心Identity列将在明年左右耗尽值(Int32.MaxValue)。

我正在寻找一种方法来改变这个身份从int到一个长。在过去,当我尝试这样做时,EF不会让我这样做,除非它放下桌子并重新创建它。这不是一个选项,因为这个站点已经是活动的,并且这个表中有活动的数据。

有办法做到这一点吗?到目前为止,我的网络搜索和Stackoverflow搜索并没有给我任何关于如何做到这一点的提示。

6.1将ID从Int改为Long

要求代码优先迁移:

1)更新你的模型

2)创建迁移

3)在生成的迁移中编写自定义SQL以删除PK和引用它的每个FK。这可能会变得相当混乱,因为您必须找出名称。把它放在AlterColumn上面。

4)编写自定义SQL来重新添加PK和fk,并将其放在AlterColumn下。

5)现在在你的Down脚本中做相反的操作。

仅供参考,这在Azure SQL中是不可能的。在本例中,您必须创建一个新表。

我只是用SQL Server的EF 6.1.3做了这个,在改变我的模型并运行Add-Migration之后,EF能够自己创建正确的迁移!太棒了!

对于那些使用相同设置的人(我猜这是EF6最常见的用例),最好的解决方案是更新EF库,更改代码,像往常一样创建迁移,并确保它正在做Jeff上面描述的事情。