2016-08-17 154 views
1

我有一个简单的问题。我们在MVC应用程序中使用数据库来保存我们的联系人。但是当表更新时,行的ID正在增加。我脑海中已经进入了一个关于整数极限的问题。在我们的表中,Id变量是整数。它可以通过它的限制而崩溃。所以我写到我的项目中,实体框架代码优先使用

context.Database.ExecuteSqlCommand("DBCC CHECKIDENT ('Contacts', RESEED, 0)"); 

我可以在Code First Entity Framework中使用它吗?这是合法吗?谢谢...

+0

我不认为这是一种常见的方式。也许'长'作为整数键就足够了。 –

+0

或者如果您太担心限制,可能会成为Guid的关键? – Developer

+1

这个自动增量字段是Contacts表的PK吗?因为如果是这样,并且在运行重新命名命令之前没有删除现有数据,您将会遇到严重的PK违规问题..我可能会在这种情况下使用Guid。 – jpgrassi

回答

0

我可以用它在代码第一次实体框架?这是合法吗?谢谢...

作为@ jpgrassi说这可能会为您带来严重的问题。

,你能做些什么来解决这个问题?

解决方案1)您可以重组并重建索引如下:*

context.Database.ExecuteSqlCommand( “ALTER INDEX ALL ON联系人REORGANIZE;”); context.Database.ExecuteSqlCommand( “ALTER INDEX ALL ON联系人REBUILD;”);

  • 您必须注意您的bussines逻辑不依赖于主键,例如,你不必在你的代码类似的东西,如果(Contact.Id == 1)...

  • 在你的应用程序了例如做这个工作的额外任务一周一次,并且不要每次都通过应用程序启动或DbContext创建来执行此命令!

更多信息:

https://msdn.microsoft.com/en-us/library/ms189858.aspx https://www.brentozar.com/archive/2013/09/index-maintenance-sql-server-rebuild-reorganize/

解决方案2)使用长主键instaed的INT

public long Id {get;set;} 

备注:

如果一个索引介于10%和30%之间,我将重新组织索引并更新统计信息。如果索引超过30%分散,我会重建索引 - 没有UPDATE STATISTICS,因为REBUILD已经处理了这个问题。请记住,重建只会更新与索引直接关联的统计数据对象。其他列统计信息需要单独维护。

+0

我实际上有很多问题想要解决方案1。 ExecuteSqlCommand始终返回-1 –