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)
这更像是一个清理/数据管理员的任务 - 不是你应该作为开发人员一直做的事情.
您可能尝试在LINQ实体中显式设置主键值; 您试图说,例如,在主键字段中插入1是一个标识,LINQ将其视为插入值.
另外,如果使用LINQ to SQL,在字段的服务器数据类型中,请确保在数据类型字段中显示IDENTITY; 如果它没有说出IDENTITY,则LINQ中可能存在配置错误.
| 归档时间: |
|
| 查看次数: |
21222 次 |
| 最近记录: |