2014-11-04 88 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