2014-07-21 66 views
7

我正在編寫一個MVC5互聯網應用程序,我對模型的id字段有疑問。我應該在實體框架模型中使用int或long作爲主鍵

我應該使用int還是long作爲模型中的id?我正在談論用於主鍵的字段?如果數據庫擁有100,000條記錄,那麼它是否足夠?在C#中的int是否與SQL數據庫中的int不同?

在此先感謝

+0

請注意,如果Code First類的主鍵屬性是'long'類型,則可能需要將'[Key]'DataAnnotation添加到屬性 –

回答

2

兩者都行。這取決於表格中有多少條記錄。 Int允許每個表只有2 * 10^9個記錄。

如果您確定,2 * 10^9就足夠了,請使用int作爲鍵。

但是: 如果記錄計數超過2 * 10^9的可能性很小,請使用long。 如果您不知道有多少條記錄,請使用long。

+0

大小不是2 * 10^9,它是2^31 –

+2

@Erik Funkenbusch:2^10 = 1024大約10^3。 2^31 = 2 * 2^9。因此它大約是2 *(10^3)^ 3 = 2 * 10^9 –

5

C#和SQL有一個int相同的定義,這是從去到-2^312^31 - 1(如果你喜歡2,147,483,647)的整體數據類型。

正如您所看到的,您的100,000條記錄可以在int中適合超過20,000次,因此,您在當前情況下仍然可以正常使用。

A long然而,在SQL中會轉換爲bigint(本身沒有「long」),並且值爲2^63 - 1

24

對於類型INT,從1開始,您將得到超過20億可能的行數 - 對絕大多數情況來說應該足夠了。與BIGINT,你大致得到922 quadrillion(922 15零 - 922'000億) - 足夠你?

如果使用INT IDENTITY從1開始,而你插入一行每秒,全天候,則需要66.5 你打2十億限制....

如果你之前使用BIGINT IDENTITY(以T-SQL BIGINT被定義爲long或.NET語言Int64)從1開始,而你插入千行每秒,你需要一個令人難以置信的2.92億年你打的前922萬億的極限....

MSDN Books Online瞭解更多關於它的信息(包括所有選項)。