Sql server 使用序列作为实体框架中主键值的生成器插入

Sql server 使用序列作为实体框架中主键值的生成器插入,sql-server,entity-framework,sql-server-2012,tsql-sequence,Sql Server,Entity Framework,Sql Server 2012,Tsql Sequence,我有这样一个序列: CREATE SEQUENCE dbo.NextWidgetId AS [bigint] START WITH 100 INCREMENT BY 2 NO CACHE GO CREATE TABLE [dbo].[Widget_Sequenced] ( [WidgetId] [int] NOT NULL DEFAULT(NEXT VALUE FOR dbo.NextWidgetId), [WidgetCost] [money] NOT NULL,

我有这样一个序列:

CREATE SEQUENCE dbo.NextWidgetId
 AS [bigint]
 START WITH 100
 INCREMENT BY 2
 NO CACHE 
GO
CREATE TABLE [dbo].[Widget_Sequenced]
(
    [WidgetId] [int] NOT NULL DEFAULT(NEXT VALUE FOR dbo.NextWidgetId),
    [WidgetCost] [money] NOT NULL,
    [WidgetName] [varchar](50) NOT NULL,
    [WidgetCode] [int] NOT NULL,
    [LastChangedBy] [int] NOT NULL,
    [RowVersionId] [timestamp] NOT NULL,

    CONSTRAINT [PK_Widget_Sequenced] 
    PRIMARY KEY CLUSTERED ([WidgetId] ASC) ON [PRIMARY]
) ON [PRIMARY]
还有一张像这样的桌子:

CREATE SEQUENCE dbo.NextWidgetId
 AS [bigint]
 START WITH 100
 INCREMENT BY 2
 NO CACHE 
GO
CREATE TABLE [dbo].[Widget_Sequenced]
(
    [WidgetId] [int] NOT NULL DEFAULT(NEXT VALUE FOR dbo.NextWidgetId),
    [WidgetCost] [money] NOT NULL,
    [WidgetName] [varchar](50) NOT NULL,
    [WidgetCode] [int] NOT NULL,
    [LastChangedBy] [int] NOT NULL,
    [RowVersionId] [timestamp] NOT NULL,

    CONSTRAINT [PK_Widget_Sequenced] 
    PRIMARY KEY CLUSTERED ([WidgetId] ASC) ON [PRIMARY]
) ON [PRIMARY]
有没有一种方法可以使用实体框架将新记录添加到此表结构中

我尝试将
WidgetId
StoreGeneratedPattern
设置为
computed
,并尝试使用
Identity
。两人都给了我错误


我用EF5试过这个。但是如果EF 6解决了这个问题,我可以改成EF 6。

你可以用IDENTITY(100,2)替换你的序列,一切都会开箱即用

可以从6.2版开始,使用以下代码:

System.Data.Entity.SqlServer.SqlProviderServices.UseScopeIdentity=false


更多关于

的信息好吧,它是在避免问题,而不是解决问题。是的,
IDENTITY(100,2)
的工作原理与此特定的
序列
类似,只是据我所知,
IDENTITY
没有
缓存
选项。此外,这个
SEQUENCE
对象可以在其他表中用于跨多个表生成单个序列-您无法使用
IDENTITY
轻松复制此行为。据我所知,
NOCACHE
选项用于减少索引中的间隙。但是表示“如果使用的下一个值请求数字,则仍可能出现间隙”。谢谢。我有了一个身份,现在转到一个序列。我需要能够更新该值(使其移动分区)。在哪里设置该值?表示序列列的字段需要什么属性?@jkerak