IDENTITY INSERT和LINQ to SQL

use*_*662 13 .net c# identity-insert linq-to-sql

我有一个SQL Server数据库.该数据库有一个名为Item的表.Item有一个名为"ID"的属性.ID是我桌子上的主键.此主键是一个增量值为1的int.当我尝试插入记录时,收到一条错误消息:

当IDENTITY_INSERT设置为OFF时,无法在表'Item'中为identity列插入显式值."

我试图使用以下代码插入记录:

  public int AddItem(Item i)
  {
    try
    {
      int id = 0;
      using (DatabaseContext context = new DatabaseContext())
      {
        i.CreatedOn = DateTime.UtcNow;
        context.Items.InsertOnSubmit(i);
        context.SubmitChanges();
        id = i.ID;
      }
      return id;
    }
    catch (Exception e)
    {
      LogException(e);
    }
  }
Run Code Online (Sandbox Code Playgroud)

当我在提交之前查看i.ID时,我注意到i.ID被设置为0.这意味着我正在尝试插入0作为标识.但是,我不确定应该是什么.有人可以帮我吗?

谢谢!

Mar*_*ell 10

听起来好像你的模型不知道它一个身份; 该ID列应标记为db-generated(Auto Generated Value在UI中,或IsDbGenerated在xml中),并可能作为主键.然后它不会尝试插入它,并在写入后正确更新值.


Dam*_*ver 7

将ID属性的"自动生成"属性设置为"True".


Eri*_*lli 6

检查类中的ID属性Item以确保它具有如下属性:

[Column(Storage="_ID", AutoSync=AutoSync.OnInsert,
    DbType="INT NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
Run Code Online (Sandbox Code Playgroud)

看看IsDbGenerated=true,这是重要人物.

也许您DatabaseContext在调整IDENTITYSql Server 之前创建了使用设计器,因此只需重新生成此类(通过删除设计器中的表并再次从Server Explorer中删除它).