为什么ef中的身份号码会跳到一个大数字?

mot*_*deh 5 c# sql-server entity-framework

我在我的网站上使用实体框架6.0.

我有一个表插入一些数据,这个表有ID(int)的标识列,我的标识种子等于1;

有些时候,我通过sql管理工作室看这个表,我通过将这个ID跳到大号来遇到,例如从30跳到10024.

为什么会这样?这是一个错误还是什么?

我在这里发布了我的示例代码,我通过以下代码向此表插入数据:

 using (var context = new MyModelDBEntities())
        {
             mytable mt=new mytable;
             mt.name=""; //for example
            context.mytables.add(mt);
            context.SaveChanges();
        }
Run Code Online (Sandbox Code Playgroud)

这个代码是正常的吗?那么发生在我的桌子上的那个身份号码跳到了一个大号?

D S*_*ley 7

可能有很多原因 - 一个可能是尝试插入9,994条记录失败(或多次失败的尝试共计9,994条记录).

标识列不保证连续的 ID; 它保证了唯一的 ID.如果插入尝试失败(或者是回滚的事务的一部分),则不会重用已生成的ID.

另一种选择是在使用后插入特定ID SET IDENTITY_INSERT ON.

在任何情况下,你都有超过20亿个ID可用,因此差距为10,000左右不应引起警报.如果随着时间的推移差距越来越,那么您可能会遇到更大的问题,因为差距可能呈指数级增长.