2016-08-17 156 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 –