IDENTITYINSERT和LINQtoSQL我有一个SQLServer数据库。数据库有一个名为Item的表。项目有一个名为“ID”的属性。ID是我表上的主键。此主键是一个增量值为1的int。当我尝试插入记录时,我收到一条错误消息:当IDENTITY_INSERT设置为OFF时,无法在表'Item'中插入标识列的显式值。“我正在尝试使用以下代码插入一条记录:publicintAddItem(Itemi){try{intid=0;using(DatabaseContextcontext=newDatabaseContext()){i.CreatedOn=DateTime.UtcNow;context.Items.InsertOnSubmit(i);context.SubmitChanges();id=i.ID;}returnid;}catch(Exceptione){LogException(e);}}当我在提交前查看i.ID时,我注意到i.ID设置为0。这意味着我正在尝试插入0作为身份。但是,我不确定它应该是什么。有人可以帮助我吗?谢谢!听起来你的模型不知道它是一个身份;ID列应标记为db生成的(UI中的自动生成值,或xml中的IsDbGenerated),并可能作为主键。然后它不会尝试插入它,并正确更新写入后的值。将ID属性的“AutoGenerated”属性设置为“True”。检查Item类中的ID属性,确保其具有以下属性:[Column(Storage="_ID",AutoSync=AutoSync.OnInsert,DbType="INTNOTNULLIDENTITY",IsPrimaryKey=true,IsDbGenerated=true)]看IsDbGenerated=true,这个很重要。也许您在调整SqlServer上的IDENTITY之前使用设计器创建了DatabaseContext,因此只需重新生成此类(通过删除设计器中的表并再次从服务器资源管理器中删除它)。在您调用context.SubmitChanges()之前,ID将为零;调用SubmitChanges后,单步执行代码并查看值。请记住,数据库实际上是在分配ID(假设它是一个自动增量键)。检查一下:使用实体键您必须在映射中定义以在数据库中生成id。执行此操作的方法取决于您使用的映射类型。如果您使用代码属性,请确保在ColumnAttribute属性的IsDbGenerated中(或在XML映射中)指定IsDbGenerated。如果您使用dbml文件,请确保将“Autogeneratedvalue”设置为true。最简单的方法是:1.打开dbml2.选择要插入的类3.使用主键选择列4.在属性窗口中选择AutoGeneratedProperty(应该设置为True)以上就是分享的全部内容通过C#学习教程:IDENTITYINSERT和LINQtoSQL。大家有用,需要多了解C#学习教程。希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
