草庐IT

c# - "Cannot insert explicit value for identity column in table when IDENTITY_INSERT is set to OFF"带复合键

coder 2024-05-26 原文

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

例如,如果一个表有 ID 然后是字段,它现在有 Company_ID,然后是 ID,然后是字段。这个想法是,这允许 ID 为提供给功能的每个不同的 Company_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由数据库自动填充,然后用于通过View执行SHOW等。

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

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

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

Cannot insert explicit value for identity column in table "Project" when IDENTITY_INSERT is set to OFF

这是指定Company_ID造成的,还是ID字段造成的?您知道我们如何解决这个问题吗?

最佳答案

问题出在ID上。如果您将一个字段设置为 IDENTITY,您通常不能为其分配一个值 - IDENTITY 属性将其标记为允许数据库自动为该列分配一个递增的值。

要解决这个问题,要么从 ID 中删除自动 IDENTITY 属性(如果你想自动递增它,你总是可以在你的处理代码中这样做 - 获取字段中的最大值,将其加一然后分配该值)或转到数据库并在表上设置 IDENTITY _INSERT,这暂时允许您将值分配给 IDENTITY 字段。

SET IDENTITY_INSERT [yourTableName] ON

--go back and run your C# code>

SET IDENTITY_INSERT [yourTableName] OFF

关于c# - "Cannot insert explicit value for identity column in table when IDENTITY_INSERT is set to OFF"带复合键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23808967/

有关c# - "Cannot insert explicit value for identity column in table when IDENTITY_INSERT is set to OFF"带复合键的更多相关文章

随机推荐