我们最近在数据库中添加了一个新的“级别”-在整个数据库中表中现有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字段引起的?您知道我们如何纠正此问题吗?
睡觉后,我发现了此内容,适用于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的要求。
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
ID
Company_ID
_db.Project.Add(newProject);
_db.SaveChanges();
IDENTIY_INSERT