我有一个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,请在可视设计器中单击有问题的表,然后查看属性:
“自动生成的值”必须为“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/