使用 C# 出现错误“无法在表中插入标识列的显式值”
Posted
技术标签:
【中文标题】使用 C# 出现错误“无法在表中插入标识列的显式值”【英文标题】:Error "Cannot insert explicit value for identity column in table" using C# 【发布时间】:2021-03-10 20:05:19 【问题描述】:我在使用简单的本地 SQL 数据库时遇到问题。我对数据库或使用 C# 访问它们不是很了解,所以任何帮助将不胜感激。我正在尝试使用 C# 通过 Linq to SQL 向我的数据库中的一个表添加一个条目。这是我的sn-p代码。
using (DataClasses1DataContext db = new DataClasses1DataContext())
tbl_Inventory inv = new tbl_Inventory();
inv.Title = addTitleTextBox.Text;
inv.Model = addModelTextBox.Text;
inv.Category = addCategoryTextBox.Text;
inv.Quantity = int.Parse(addQuantityTextBox.Text);
inv.Price = decimal.Parse(addPriceTextBox.Text);
inv.Description = addDescriptionTextBox.Text;
db.tbl_Inventories.InsertOnSubmit(inv);
db.SubmitChanges();
int id = inv.IdProducts;
MessageBox.Show($"Item creation successful. Item number is id");
我不断收到以下错误:
当 IDENTITY_INSERT 设置为 OFF 时,无法为表 'tbl_Inventory' 中的标识列插入显式值
我的表有一个名为 IDProducts
的列,它用作标识列以递增 1。我可以在 Visual Studio 设计窗口中添加条目,它添加的条目没有错误,增量工作正常,但不是当我运行我的代码时。问题是我的代码没有尝试为IDProducts
赋值。我尝试删除 IDProducts
并将其添加回来,但我仍然遇到同样的错误。我通过 Visual Studio 创建了另一个表,其方式与上面的代码非常相似,将条目添加到表中,我没有任何问题。我不确定我可能会做些什么不同的事情。
【问题讨论】:
这能回答你的问题吗? Cannot insert explicit value for identity column in table 'table' when IDENTITY_INSERT is set to OFF 看看这篇文章:appuals.com/… 您必须在数据库中将Identity
设置为true
。分享一张你在 SQL server 中的表设计图
我认为真正的问题是你的 C# 模型类没有正确告诉 Linq-to-SQL IDProducts
列是数据库生成的标识列 - 你能告诉我们 C#模型类?
【参考方案1】:
您的 C# 模型类似乎没有将 IDProducts
列正确定义为 IDENTITY
列 - 因此您的 Linq-to-SQL 代码尝试将值插入标识列,这会导致错误。
您需要确保正确注释您的列 - 因为我不知道您的 tbl_Inventory
类是什么样的,所以我只能向您展示:
[Table(Name="Inventory")] // or whatever it really is ...
public class tbl_Inventory
[Column(IsPrimaryKey=true,IsDbGenerated=true)]
public int IDProducts get; set;
// all your other columns here
您需要将 IsDbGenerated
注释添加到您的 IDProducts
列,以便 Linq-to-SQL 在插入时知道这是数据库正在生成值的列。
【讨论】:
感谢您的意见。我最终解决了那部分。我查看了我的 DataClasses.dbml 并在 IdProducts 属性中将自动生成的值设置为 false。不知道为什么它不像我的其他表那样自动设置。我将其设置为 true 并将 Auto-Sync 设置为 OnInsert 并开始工作。我的 MessageBox.Show 现在正在执行,如果我提交多个条目,它将显示它正在递增,但我没有看到保存到表中的数据,并且当我退出程序并再次启动时,增量将重新开始。如果我无法弄清楚,我会解决一些问题并提交另一篇文章。以上是关于使用 C# 出现错误“无法在表中插入标识列的显式值”的主要内容,如果未能解决你的问题,请参考以下文章
实体框架抛出无法在表中插入标识列的显式值...当 IDENTITY_INSERT 设置为 OFF 错误
使用 VS2010 在 C# 上出现 Wininet.dll 错误