asp.net – IDENTITY_INSERT设置为关闭错误

前端之家收集整理的这篇文章主要介绍了asp.net – IDENTITY_INSERT设置为关闭错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个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,请在可视化设计器中单击相关表,并查看属性

alt text 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

这更像是一个清理/数据管理类的任务 – 而不是你应该做的一切都是开发人员.

原文链接:https://www.f2er.com/aspnet/245803.html

猜你在找的asp.Net相关文章