IDENTITY_INSERT设置为关闭错误

kin*_*005 10 sql t-sql asp.net asp.net-mvc

我有一个MVC Web应用程序,在模型中有一个表,我想添加.我有主键设置以及其他数据字段,但每次我尝试添加到表时,我收到以下错误:

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

我不确定为什么会出现这个问题,我将主键设置为标识,并在Visual Studio表设计器中设置为自动增量.有没有什么办法可以在Visual Studio中调整表设计器中的IDENTITY_INSERT参数?或者是否存在可能导致此问题的其他问题.

更新:@Brian - 据我所知,我没有明确设置值,这里是添加到表中的代码.

//Add viewer
public void addViewer(ModelStateDictionary modelState, Users user)
{
   var userToAdd = new UserRoles();
   userToAdd.Users = user;

   if (String.IsNullOrEmpty(userToAdd.Users.Username))
   {
      modelState.AddModelError("noName", "Please enter a username for the new Viewer");
   }

   //See if Committee Member already exists
   try
   {
      userToAdd = _db.UserRoles.First(ur => ur.Users.Username == userToAdd.Users.Username);
      modelState.AddModelError("userExists", "A Viewer with that username already exists in the system");
      return;
    }
    catch (Exception e)
    {
       if (modelState.IsValid)
       {
          //Assign Committee Member role
          userToAdd.Role = "Viewer";
          userToAdd.Users = user;
          //Add new Committee Member to User Roles and associated username to Users
          _db.AddToUserRoles(userToAdd);
          _db.SaveChanges();
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 15

您的代码似乎试图将特定值插入到定义为IDENTITY的主键列中.

为避免错误 - 请勿插入任何值!让数据库处理为您要插入的行获取新值.

如果您使用的是Linq-to-SQL,请在可视化设计器中单击相关表格,然后查看属性:

替代文字http://i39.tinypic.com/bgzs6d.png

"自动生成的值"必须为"True"(这不是默认值),自动同步应为"OnInsert"(再次:不是默认值).此外,将"主键"设置为true,并检查以确保"服务器数据类型"正确 - Int NOT NULL IDENTITY(或类似的东西).

如果您需要覆盖默认行为(通常仅在清理脚本或一次性数据操作中),您可以打开表上的IDENTITY_INSERT,例如,之后,您可以将任何值插入IDENTITY列:

SET IDENTITY_INSERT YourTableName ON

INSERT INTO YourTableName(IdentityColumn) VALUES(5555)

SET IDENTITY_INSERT YourTableName OFF
Run Code Online (Sandbox Code Playgroud)

这更像是一个清理/数据管理员的任务 - 不是你应该作为开发人员一直做的事情.


Bri*_*ins 5

您可能尝试在LINQ实体中显式设置主键值; 您试图说,例如,在主键字段中插入1是一个标识,LINQ将其视为插入值.

另外,如果使用LINQ to SQL,在字段的服务器数据类型中,请确保在数据类型字段中显示IDENTITY; 如果它没有说出IDENTITY,则LINQ中可能存在配置错误.