例如,如果一个表格原来只有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,并用此ID执行SHOW操作,等等。
现在,我们希望将Company_ID设置为指定的值,保留ID,并像以前一样填充字段。
_db.Project.Add(newProject);
_db.SaveChanges();
是的,我们想要指定 Company_ID 的值。我们希望 ID 能够像以前一样自动填充。 我们收到以下错误信息:
当 IDENTITY_INSERT 被设置为 OFF 时,在表 "Project" 中的标识列上插入显式值无效。
(译注:即不能手动指定 ID 值)
这是因为指定了 Company_ID 还是 ID 字段引起的?您知道如何纠正此问题吗?
IDENTITY
规范是不断增加的,如果没有为该字段打开IDENTITY_INSERT
,则无法向其插入值。你不会得到Company_ID
1 具有ID
1、2、3 和Company_ID
2 具有ID
1、2、3 等的结果。你将得到Company_ID
1 具有ID
1、2、3 和Company_ID
2 具有ID
4、5、6 的结果。这可能对你来说不是问题,但只是提醒你,ID
不关心Company_ID
中包含什么,并且不会改变其行为。 - Steve PettiferCompany_ID
1具有ID
1、2、3,而Company_ID
2具有ID
4、5、6。感谢您提出这个问题-最初的调查人员已被解雇!;) 如果我们的客户公司合并(这在过去发生过),数据库中“重复”的ID
值将不允许轻松合并数据。这样,我们只需更新数据的Company_ID
值,就可以继续进行了。再次感谢。 - and_E