我应该在实体框架模型中使用int或long作为主键

use*_*648 11 c# int model primary-key entity-framework-6

我正在写一个MVC5互联网应用程序,我有一个关于模型的id字段的问题.

我应该在模型中使用int或long来表示id吗?我在谈论用于主键的字段?如果数据库有100,000个记录,那么它是否足够?c#中的int是否与SQL数据库中的int不同?

提前致谢

mar*_*c_s 40

对于INT从1开始的类型,您可以获得超过20亿个可能的行 - 这对于绝大多数情况来说应该足够了.有了BIGINT,你得到大约922千万亿(922有15个零 - 922'000亿) - 足够你?

如果您使用INT IDENTITY从1开始,并且每秒钟插入一行,那么您需要66.5 才能达到20亿的限制....

如果你从1开始使用BIGINT IDENTITY(BIGINT在T-SQL中定义为longInt64在.NET语言中),并且每秒插入一千行,那么在达到922千万亿次限制之前,你需要一个令人难以置信的2.92亿年 ...... .

MSDN联机丛书中了解有关它的更多信息(包括所有选项).

  • 对于每个意外关闭/失败的 SQL 服务,将计数器添加 1000,因为服务器会在缓存中提前保存 1000 个数字,并且不会在失败时将它们放回原处,因此您可以轻松地在标识列中看到 1000 的跳转。我很容易在我定义的每个标识列中选择“长”(Int64)版本。如果您不知道此行为:/sf/answers/991393301/ (3认同)

Dmi*_*nok 8

两者都可以。这取决于表中有多少记录。Int 每个表只允许 2*10^9 条记录。

如果您确定 2*10^9 就足够了,请使用 int 作为键。

但是:如果记录数超过 2*10^9 的可能性很小,请使用 long。如果您不知道将拥有多少条记录,请使用 long。

  • @Erik Funkenbusch:2^10 = 1024 大约是 10^3。2^31 = 2*2^9。因此它大约是 2*(10^3)​​^3 = 2*10^9 (6认同)

Pie*_*ult 5

C#和SQL有一个相同的定义int,这是从去不可分割的数据类型-2^31,以2^31 - 1(2,147,483,647如果你喜欢).

正如您所看到的,您的100,000个记录可能超过20,000次int,所以是的,您将在当前场景中正常运行.

long然而,A 将转换为bigintin sql(本身没有"long"),并且值为2^63 - 1.