我有一个带有标识列的表ID
。每次sql服务重启,我插入一个新值,ID就增加10000。【微软连接链接】(ID类型为bigint)
我想要一个正常的增量列,如何使用 Entity Framework 来实现?我正在使用数据库优先(.edmx 模型)
我有一个带有标识列的表ID
。每次sql服务重启,我插入一个新值,ID就增加10000。【微软连接链接】(ID类型为bigint)
我想要一个正常的增量列,如何使用 Entity Framework 来实现?我正在使用数据库优先(.edmx 模型)
我假设您使用的是 SQL Server 2012?据我所知,这种行为是由于 SQL 服务器本身为提高性能而预先分配和缓存列的标识值的方式,我认为没有任何方法可以通过 EF 来控制它。
如果您需要我所知道的无间隙序列,解决此问题的方法是:
澄清一下,当我说无间隙时,我的意思是如果 SQL 服务意外重新启动,序列将始终从上次的位置开始,因为每次更改都写入系统表,您仍然可以通过其他方式获得序列中的间隙,例如作为交易回滚等。
D B:
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 设置为表列属性中的计算值。