小编典典

使用复合键“在IDENTITY_INSERT设置为OFF时,不为表中的标识列插入显式值”。

sql

我们最近在数据库中添加了一个新的“级别”-在整个数据库中表中现有ID标识字段的上方/之前添加了一个键“ Company_ID”。

例如,如果一个表具有“ ID”和“字段”,则它现在具有“ Company_ID”,“
ID”和“字段”。想法是,这允许为提供给功能的每个不同Company_ID值自动递增ID(Company_ID 1可以具有ID 1、2、3等;Company_ID 2可以具有ID 1、2、3等)。

自动增量字段保留为ID。一个示例表是:

    [dbo].[Project](
      [Company_ID] [int] NOT NULL,
      [ID] [int] IDENTITY(1,1) NOT NULL,
      [DescShort] [varchar](100) NULL,
      [TypeLookUp_ID] [int] NULL,
      [StatusLookUp_ID] [int] NULL,
      [IsActive] [bit] NOT NULL,
    CONSTRAINT [PK_Project] PRIMARY KEY CLUSTERED 
    (
      [Company_ID] ASC,
      [ID] ASC
    )

在引入Company_ID之前,要执行CREATE,我们只需填充DescShort,TypeLookUp_ID,StatusLookUp_ID和IsActive字段,并将ID保留为默认值,可能为0。

记录已成功保存,并且ID由数据库自动填充,然后用于通过视图执行SHOW,依此类推。

但是,现在,我们要将Company_ID设置为指定值,保留ID,然后像以前一样填充字段。

    _db.Project.Add(newProject);
    _db.SaveChanges();

是的,我们要指定Company_ID值。我们希望ID像以前一样自动填充。我们收到错误消息:

IDENTITY_INSERT设置为OFF时,无法为表“项目”中的标识列插入显式值

这是由指定Company_ID还是由ID字段引起的?您知道我们如何纠正此问题吗?


阅读 250

收藏
2021-03-17

共1个答案

小编典典

睡觉后,我发现了此内容,适用于Visual Studio
c#代码:[DatabaseGenerated(DatabaseGeneratedOption.Identity)]。为我的每个ID字段定义的这个(用我的话来说)告诉VisualStudio该字段是一个Identity,并在将值发送到数据库时“独立”。whenCompany_ID首先发生并具有一个值,告诉VisualStudio其他地方有一个Identity字段_db.Project.Add(newProject);,然后允许该_db.SaveChanges();函数然后按要求运行。答案的这一部分是针对VisualStudio方面的。IDENTIY_INSERT感谢@ matt-thrower,@steve-pettifer和其他贡献者,我了解SQL的要求。

2021-03-17