gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:16:10 25 4
gpt4 key购买 nike

我们最近向我们的数据库添加了一个新的“级别”——在整个数据库中的表中现有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com