我有简单的DataTable
CREATE TABLE [dbo].[Table] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Name] NCHAR (10) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
使用一条记录,Name="Test"
Id
获取自动0。
当我使用基本的创建操作时
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Table table)
{
if (ModelState.IsValid)
{
db.Table.Add(table);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(table);
}
我收到错误:
无法在表'Table'中为identity列插入显式值 IDENTITY_INSERT设置为OFF。
我做错了什么?如何解决此错误?
表类
public partial class Table
{
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
}
答案 0 :(得分:1)
您需要将IsDbGenerated
设置为true
。然后将System.Data.Linq
添加到您的参考文献中:
[System.Data.Linq.Mapping.Column(Storage = "Id", DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)]
public int Id { get; set; }
答案 1 :(得分:0)
它闻起来就像你从参数(Table table
)检索的表格将属性Id
设置为除0
之外的其他值。
如果是这种情况,请确保在Id
之前将0
设置为db.Table.Add(table);
如果要更新项目(如果存在),则需要在添加项目之前检查Id
是否为0
。
if(table.Id == 0)
db.Table.Add(table);
db.SaveChanges();
答案 2 :(得分:0)
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
这对我有用。