C# 如何创建不包含';每次使用EF重新启动服务时,是否跳过10000?

C# 如何创建不包含';每次使用EF重新启动服务时,是否跳过10000?,c#,sql-server,entity-framework,sql-server-2012,C#,Sql Server,Entity Framework,Sql Server 2012,我有一个带有标识列ID的表。(ID类型为bigint) 我想要一个普通的增量列,如何使用实体框架实现它?我首先使用数据库(.edmx模型)我假设您使用的是SQL Server 2012?据我所知,这种行为是由于SQL server本身预先分配和缓存列的标识值以提高性能的方式造成的,我认为没有任何方法可以通过EF来控制这种情况 如果您需要我所知的无间隙序列,解决方法如下: 使用无缓存属性的序列对象 启用跟踪标志T272,该标志将禁用标识值的预分配并还原为SQL Server 2008 R2类型

我有一个带有标识列
ID
的表。(ID类型为bigint)


我想要一个普通的增量列,如何使用实体框架实现它?我首先使用数据库(.edmx模型)

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

如果您需要我所知的无间隙序列,解决方法如下:

  • 使用无缓存属性的序列对象
  • 启用跟踪标志T272,该标志将禁用标识值的预分配并还原为SQL Server 2008 R2类型行为
只是想澄清一下,当我说gapless时,我的意思是如果SQL服务意外地重新启动,那么当每次更改都写入系统表时,序列将始终从最后一次启动的位置开始,您仍然可以通过其他方式获得序列中的间隙,例如事务回滚等。

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


SQL Server从未保证
IDENTITY
值会创建一个“无间隙序列”。好吧,是的,但它们从来没有像2012年那样跳跃过,也许无间隙是一个错误的词。好吧,我发布的链接上有这么多。但是如何使用序列呢?和/或如何使用该标志?我使用的是Azure上的Database first hosting。可能存在重复。另外,如果您关心标识列的数值,则说明您做错了。尽可能多地将它们视为不透明的斑点,您恰好能够将它们存储在
int
列/变量中。这不是您所问问题的答案。连接项链接中已经提到了将
序列
NOCACHE
一起使用。您的问题是关于
IDENTITY
列的。它们不是一回事。e、 g.
SCOPE\u IDENTITY
@@IDENTITY
不会注意序列。顺便说一句,这不是我的否决票。我只是指出,这不是对标题“如何创建一个不会在每次使用EF重新启动服务时跳过10000的标识列”中问题的回答因为它实际上并不创建
标识
列。您所问问题的答案由steoleary提供。如果有约束意味着你不能使用它,那么你应该在问题中提到它们。