》当IDENTITY_INSERT设置为OFF时,不能使用复合键插入表中的标识列在表显式值中插入标识列”我们最近向数据库添加了一个新的“级别”——在整个数据库中的表中现有ID标识字段上方/之前添加一个键“Company_ID”。例如,如果一个表有一个ID,然后有一个字段,它现在有Company_ID,然后是一个ID,然后是一个字段。这个想法是,这允许为提供给函数的每个不同的Company_ID值自动递增ID(Company_ID1可以有ID1、2、3等;Company_ID2可以有ID1、2、3等)。自动递增字段保留为ID。一个示例表是:[dbo].[Project]([Company_ID][int]NOTNULL,[ID][int]IDENTITY(1,1)NOTNULL,[DescShort][varchar](100)NULL,[TypeLookUp_ID][int]NULL,[StatusLookUp_ID][int]NULL,[IsActive][bit]NOTNULL,CONSTRAINT[PK_Project]PRIMARYKEYCLUSTERED([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字段引起的吗?您知道我们如何解决这个问题吗?问题出在ID上。如果一个字段被设置为IDENTITY,那么它一般不能被赋值——IDENTITY属性将其标记为允许数据库自动为该列赋增量值。要解决此问题,请从ID中删除自动IDENTITY属性(如果您想自动递增它,您始终可以在处理代码中执行此操作-获取字段中的最高值,为其添加一个值并分配)或转到数据库并在表上设置IDENTITY_INSERT,这暂时允许您为IDENTITY字段赋值。SETIDENTITY_INSERT[yourTableName]ON--gobackandrunyourC#code>SETIDENTITY_INSERT[yourTableName]OFF睡觉后,我发现这个,对于VisualStudioc#代码:[DatabaseGenerated(DatabaseGeneratedOption.Identity)]。这(在我看来)是为我的每个ID字段定义的,它告诉VisualStudio该字段是一个ID,并在将值发送到数据库时“不理会它”。当Company_ID排在第一位并有值时,告诉VisualStudio其他地方有一个Identity字段允许_db.Project.Add(newProject);然后_db.SaveChanges();按要求工作。这部分答案是针对VisualStudio方面的。我了解IDENTIY_INSERT的SQL要求,因此感谢@matt-thrower、@steve-pettifer和其他贡献者。对我来说,简单的EDMX更新就是简单的EDMX更新。因为我之前设置了IdentityOff然后改成了auto。但是Edmx没有更新。更新后,它工作正常。在这个例子中对我有用的是在类中的主键属性上设置一个属性:[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]publicintDepartmentId{get;放;IDENTITY_INSERT已经在我的数据库中。你能尝试两件事并分别尝试吗?从Id中删除身份或添加SETIDENTITY_INSERT[dbo].[Project]ON通常ID是在没有用户干预的情况下插入的,因此您会收到错误,因为您试图在其中输入数据。设置它,它将允许您输入您想要的数据,或者,只需删除您将数据输入到ID中的代码,除非这是您需要的东西好吧,您已经找到了解决方案......但考虑将ID保留为唯一的主键,保留Company_Id作为外键SQL表中外键的增量是自动设置的......所以当你想插入任何东西时,你必须像这个例子一样从代码中删除这个外键。SQL代码:CREATETABLE[dbo].[annexe1]([cle][int]IDENTITY(1,1)NOTNULL,[tarif][nvarchar](50)NULL,[libele][nvarchar](max)NULL)Asp.Net代码:InsertCommand="INSERTINTO[annexe6]([cle],[tarif],[libele])VALUES(@cle,@tarif,@libele)"更正:以上为C#学习教程:"WhenIDENTITY_INSERT设置为OFF时,不能使用组合键为表中的标识列插入显式值”。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注—InsertCommand="INSERTINTO[annexe6]([tarif],[libele])VALUES(@tarif,@libele)》本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
