使用 C# 时出现错误 "Cannot insert explicit value for identity column in table"

Error "Cannot insert explicit value for identity column in table" using C#

我在使用简单的本地 SQL 数据库时遇到问题。我对数据库或使用 C# 访问它们不是很了解,所以任何帮助将不胜感激。我正在尝试使用 C# 通过 Linq 向 SQL 添加一个条目到我的数据库中的 table 之一。这是我的代码片段。

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}");
}

我不断收到以下错误:

Cannot insert explicit value for identity column in table 'tbl_Inventory' when IDENTITY_INSERT is set to OFF

我的 table 有一个名为 IDProducts 的列,用作标识列以递增 1。我可以在 Visual Studio 设计中添加条目 window 和它添加了没有错误的条目,增量工作正常,但当我 运行 我的代码时却没有。问题是我的代码没有尝试为 IDProducts 赋值。我尝试删除 IDProducts 并将其添加回来,但我仍然遇到相同的错误。我还有另一个 table 我通过 Visual Studio 创建的,使用与上面代码非常相似的代码完全相同,它向 table 添加了条目,我没有遇到任何问题。我不确定我可能做了什么不同的事情。

您的 C# 模型 class 似乎没有将 IDProducts 列正确定义为 IDENTITY 列 - 因此您的 Linq-to-SQL代码尝试将值插入标识列,这会导致此错误。

您需要确保正确注释您的专栏 - 因为我不知道您的 tbl_Inventory class 长什么样,我只能给您看这个:

[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 知道这是一个由数据库生成值的列, 插入时。