0

您知道,通过使用波纹管属性,我们可以在添加新条目int的情况下为每个条目自动生成标识:

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

如果您曾经关注过,Database 会int为每个新条目生成唯一编号,也会自动递增,并且在删除的情况下,它将从最新的专用编号(可能被删除)继续,而不是从 Table 中最新使用的编号继续。这导致表中没有后续数字,如下所示:

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 服务器是否识别出我们有很多未使用的数字作为表中的键来使用它们?或不?

4

2 回答 2

2

IDENTITY 也适用于 BIGINT 列,并且很难达到最大值。只需将 .NET 代码中的 Int32 替换为 Int64 并将数据库中的 INT 替换为 BIGINT 即可。不要重新设定值,因为它们将从 1 开始,并且会有重复。

于 2014-11-05T09:58:21.237 回答
0

我不知道 EF 会这样做(如果这样做我会担心)。标准的事情是拥有一个 DBA 种子。像这样的东西。

DBCC CHECKIDENT('Table', RESEED, 0)
于 2014-11-04T23:21:03.247 回答