您知道通过使用bellow属性,我们可以在添加新条目的情况下为每个条目自动生成int
的身份:
[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服务器是否认识到我们有许多未使用的数字作为密钥在表中使用它们?或者不是?
答案 0 :(得分:1)
IDENTITY也适用于BIGINT列,并且很难达到最大值。只需在.NET代码中将Int32替换为Int64,在数据库中替换为INT与BIGINT。不要重新设置值,因为它们将从1开始,并且会有重复。
答案 1 :(得分:0)
我不知道EF会这样做(如果有的话会让我担心)。标准事务是让DBA重新开始。这样的事情。
DBCC CHECKIDENT('Table', RESEED, 0)