使用 Linq-to-SQL 插入,其中 IDENTITY_INSERT 设置为 OFF

Posted

技术标签:

【中文标题】使用 Linq-to-SQL 插入,其中 IDENTITY_INSERT 设置为 OFF【英文标题】:Insert using Linq-to-SQL where IDENTITY_INSERT is set to OFF 【发布时间】:2018-11-29 19:18:47 【问题描述】:

我正在尝试向表中插入新行而不插入标识。我只是插入到其他列中。我希望自动创建身份。

简化代码:

Table<Class1> customers = db.GetTable<Class1>();
customers.InsertOnSubmit(new Class1  Prop1 = "test );
try  db.SubmitChanges(); 
catch (ChangeConflictException ex)  

我收到以下错误:

无法在表“日志”中为标识列插入显式值 IDENTITY_INSERT 设置为 OFF。

我假设 Linq2SQL 会自动更新所有列。但是我该如何解决呢?我什至试图从课程中省略该列,但是 Linq2SQL 告诉我:

无法对“表(Class1)”执行创建、更新或删除操作 因为它没有主键。

【问题讨论】:

【参考方案1】:

您的财产应具有以下属性:

[Column(Storage="ColumnID", AutoSync=AutoSync.Always, DbType="Int NOT NULL 
     IDENTITY", IsDbGenerated=true)]
public int ColumnID 

如果您的列表在数据库中具有自动标识,请尝试重新创建或更新您的 LINQ TO SQL DB 上下文。

【讨论】:

谢谢。但我不想插入身份。我希望它自动创建。 谢谢。我会试试的。我假设这是第一个代码的而不是。对吗? IsDbGenerated=true 做到了。谢谢! @ispiro 很高兴为您提供帮助!:)

以上是关于使用 Linq-to-SQL 插入,其中 IDENTITY_INSERT 设置为 OFF的主要内容,如果未能解决你的问题,请参考以下文章

Linq-To-Sql 尝试插入父实体而不是子实体

如何在插入之前加快重复检查?

使用 Linq-to-SQL 的 ADO.NET 数据服务

使用 SQL Server Compact Edition 的 Linq-to-SQL

如何改进 Linq-To-Sql 代码

如何将 LINQ-to-SQL 映射到 BLL 类?