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类型行为
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提供。如果有约束意味着你不能使用它,那么你应该在问题中提到它们。