每次使用EF重新启动服务时,如何创建不跳过10000的标识列?

时间:2013-11-13 13:54:37

标签: c# sql-server entity-framework sql-server-2012

我有一个包含标识列ID的表。 Every time the sql service restarts and I insert a new value, the ID increases by 10000.[Microsoft Connect link](ID类型为bigint)

identity increase 10000

我想要一个正常的增量列,如何使用Entity Framework实现这一目标?我正在使用Database-first(.edmx模型)

2 个答案:

答案 0 :(得分:3)

我假设您使用的是SQL Server 2012?据我所知,这种行为是由于SQL服务器本身预先分配和缓存列的标识值以提高性能的方式,我认为没有办法通过EF来控制它。

如果您需要我知道的无间隙序列,那么解决这个问题的方法是:

  • 使用具有无缓存属性的序列对象
  • 启用跟踪标志T272,该标志将禁用身份值的预分配并恢复为SQL Server 2008 R2类型行为

只是为了澄清,当我说无间隙时,我的意思是如果SQL服务意外重启,序列将始终从最后的位置开始,因为每次更改都写入系统表,您仍然可以通过其他方式,如交易回滚等。

答案 1 :(得分:0)

DB:

CREATE TABLE [MyTable]
(
    [ID] [bigint] PRIMARY KEY NOT NULL,
    [Title] [nvarchar](64) NOT NULL
)

CREATE SEQUENCE MyTableID
    AS BIGINT
    START WITH 1
    INCREMENT BY 1
    NO CACHE
    ;
GO

CREATE TABLE [MyTable]
(
    [ID] [bigint] PRIMARY KEY NOT NULL DEFAULT (NEXT VALUE FOR dbo.MyTableID),
    [Title] [nvarchar](64) NOT NULL
);

并在edmx中将ID设置为表列属性中的计算值。

Thanks billinkc and guys from dba