EF Code First 6.1将ID从Int更改为Long

时间:2014-06-26 01:24:02

标签: c# entity-framework ef-code-first

我正在开发一个使用ASP.Net MVC 4,C#和Entity Framework Code First的应用程序。有一个模型(表)正在变得越来越大,我担心明年左右的Identity列将耗尽值(Int32.MaxValue)。

我正在寻找一种方法将此身份从int更改为long。过去当我尝试这个时,EF不会让我这样做,除非它放弃了桌子并重新创建它。这不是一个选项,因为该网站已经存在并且此表中有实时数据。

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

2 个答案:

答案 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库,更改代码,像往常一样创建迁移,并确保它正在做什么杰夫如上所述。