我正在开发一个使用ASP.Net MVC 4,C#和Entity Framework Code First的应用程序。有一个模型(表)正在变得越来越大,我担心明年左右的Identity列将耗尽值(Int32.MaxValue)。
我正在寻找一种方法将此身份从int更改为long。过去当我尝试这个时,EF不会让我这样做,除非它放弃了桌子并重新创建它。这不是一个选项,因为该网站已经存在并且此表中有实时数据。
有办法做到这一点吗?到目前为止,我的网络搜索和Stackoverflow搜索没有给我任何关于如何执行此操作的提示。
答案 0 :(得分:4)
需要Code-First迁移:
1)更新您的模型
2)创建迁移
3)在生成的迁移中编写自定义SQL,以删除PK和引用它的每个FK。这可能会变得非常混乱,因为你必须找出名字。把它放在你的AlterColumn上面。
4)编写自定义SQL以重新添加PK和FK并将其放在AlterColumn下。
5)现在在Down脚本中执行相反的操作。
仅供参考,Azure SQL无法做到这一点。在这种情况下,您必须创建一个新表。
答案 1 :(得分:0)
我刚刚使用带有SQL Server的EF 6.1.3执行此操作,在更改模型并运行Add-Migration之后,EF能够自行创建正确的迁移!奇妙!
对于那些使用相同设置(我猜是EF6最常见的用例)的人来说,最好的解决方案是更新EF库,更改代码,像往常一样创建迁移,并确保它正在做什么杰夫如上所述。