我有一个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();
       }
    }
}

最佳答案

似乎您的代码正在尝试将特定值插入定义为IDENTITY的主键列中。

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

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

asp.net - IDENTITY_INSERT设置为关闭错误-LMLPHP

“自动生成的值”必须为“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

这更像是清理/数据管理之类的任务-而不是您作为开发人员始终应该做的事情。

关于asp.net - IDENTITY_INSERT设置为关闭错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2851754/

10-12 12:44
查看更多