我有一个包含标识列ID
的表。 Every time the sql service restarts and I insert a new value, the ID increases by 10000.[Microsoft Connect link](ID类型为bigint)
我想要一个正常的增量列,如何使用Entity Framework实现这一目标?我正在使用Database-first(.edmx模型)
答案 0 :(得分:3)
我假设您使用的是SQL Server 2012?据我所知,这种行为是由于SQL服务器本身预先分配和缓存列的标识值以提高性能的方式,我认为没有办法通过EF来控制它。
如果您需要我知道的无间隙序列,那么解决这个问题的方法是:
只是为了澄清,当我说无间隙时,我的意思是如果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设置为表列属性中的计算值。