2014-11-04 31 views
0

你知道,通過使用波紋管的屬性,我們可以自動生成在情況下,每個條目的int身份添加新條目EF數據庫達到最大值

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public int Id { get; set; } 

,如果你曾經關注,數據庫中的每個新條目生成唯一int號碼,自動遞增的歡迎,並在缺失的情況下,將繼續從最新的專用號碼(可被刪除),不從表最後使用的號碼。這個原因有非後續號碼,如波紋管在表:

Id Value GroupId 
1 A  1 
2 B  1 
8 C  2//here we have 5 entry deletion 
9 D  2 
25 E  3//here we have 15 entry deletion 

我的問題是:假設我們有大量條目登記的。如果關鍵屬性,說Id達到它的類型(這裏int容量等於2的32次方)的最大數量,是否EF或SQL Server認識到,我們有很多未使用的號碼作爲重點在表中使用它們?或不?

回答

1

IDENTITY與BIGINT列一起工作,它將很難達到最大值。只需將Int32替換爲.NET代碼中的Int64,將INT替換爲數據庫中的BIGINT即可。不要重新設置值,因爲它們將從1開始,並且會有重複。

+0

並且Duplicates也會在DB中導致異常。所以沒有使用未使用數字的政策?你的權利>要達到最大價值是非常困難的。任何方式都假設這裏有大量的條目。 – 2014-11-05 13:46:32

0

我不知道,EF做到這一點(它會擔心我,如果它沒有)。標準的事情是有一個DBA重新佈局。像這樣的東西。

DBCC CHECKIDENT('Table', RESEED, 0) 
+0

EF並沒有這樣做。這是SQL服務器中auto inc字段的行爲。 – Kirby 2014-11-04 23:42:22

+0

自動增加屬性本身就是一種很好的行爲。但是,當它達到最大值時,它爲下一個條目做了什麼? – 2014-11-05 09:34:11