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

时间:2015-06-23 00:30:51

标签: 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,
    [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]

有没有办法使用Entity Framework向此表结构添加新记录?

我尝试将StoreGeneratedPattern的{​​{1}}设置为WidgetId,并尝试使用computed。两者都给了我错误。

我用EF 5尝试了这个。但是如果能解决这个问题,我可以转到EF 6。

2 个答案:

答案 0 :(得分:1)

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

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

有关EF6 does not work with primary key from sequence

的更多信息

答案 1 :(得分:0)

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