1

我有一个带有标识列的表ID每次sql服务重启,我插入一个新值,ID就增加10000。【微软连接链接】(ID类型为bigint)

身份增加10000

我想要一个正常的增量列,如何使用 Entity Framework 来实现?我正在使用数据库优先(.edmx 模型)

4

2 回答 2

3

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

如果您需要我所知道的无间隙序列,解决此问题的方法是:

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

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

于 2013-11-13T13:59:53.640 回答
0

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 设置为表列属性中的计算值。

感谢 billinkc 和 dba 的人

于 2013-11-13T16:11:26.730 回答