获取错误:当IDENTITY_INSERT设置为OFF时,无法在表'Table'中为identity列插入显式值

时间:2016-03-04 12:51:38

标签: c# asp.net sql-server asp.net-mvc entity-framework-5

我有简单的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; }
}

3 个答案:

答案 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; }

这对我有用。