ASP.NET MVC 错误 SqlException:当 IDENTITY_INSERT 设置为 OFF 时,无法在表“用户”中插入标识列的显式值
Posted
技术标签:
【中文标题】ASP.NET MVC 错误 SqlException:当 IDENTITY_INSERT 设置为 OFF 时,无法在表“用户”中插入标识列的显式值【英文标题】:ASP.NET MVC error SqlException: Cannot insert explicit value for identity column in table 'Users' when IDENTITY_INSERT is set to OFF 【发布时间】:2021-11-26 00:49:24 【问题描述】:我正在尝试使用 C# .NET 进行登录 AUTH,但出现此错误并且无法解决。
这是我的代码。
User
类
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UserId get; set;
public string Name get; set;
public string Email get; set;
public string Password get; set;
注册DTO
public string Name get; set;
public string Email get; set;
public string Password get; set;
IUserRepository
public class UserRepository : IUserRepository
private readonly ApiDbContext _context;
public UserRepository(ApiDbContext context)
_context = context;
public User Create(User user)
_context.Users.Add(user);
user.UserId =_context.SaveChanges();
return user;
我遇到的错误是当我启动 Swagger 并尝试发布用户名电子邮件和密码时:
SqlException:当 IDENTITY_INSERT 设置为 OFF 时,无法在表“用户”中插入标识列的显式值。
【问题讨论】:
出于好奇,用户实体的上下文中的配置是什么样的? (发布设置用户实体的 onmodelcreating 部分,如果存在) 此外,从 SaveChanges 返回的 int 不是任何类型的 id - 它是已保存的实体数。 db生成的值会自动放到你的用户ID中;你不需要设置它。作为一个轻微的术语修正,swagger 是一种规范;你不能“启动它”。您可能指的是 swaggerUI;一个网页,根据您的项目导出的 swagger/open api 规范生成一堆示例操作和试用 另外,显示调用 CreateUser 的代码 【参考方案1】:在您的数据库中,您的用户表定义为
CREATE TABLE Users (
...
UserId int identity(1,1)
...
)
这意味着您的数据库想要为您生成 UserId 值,除非在插入记录时指定 Identity_Insert=off。但是,当您调用 Create() 时,正在执行的查询包括 UserId 列。
您没有在您的问题(或您的标签)中说明您正在使用 EntityFramework,但从您的语法来看,我正在做出这样的假设。因此,您应该在 OnModelCreating 方法中指定它。
protected override void OnModelCreating(ModelBuilder modelBuilder)
...
modelBuilder.Entity<Users>(Entity =>
...
Entity.Property(e=>e.UserId).ValueGeneratedOnAdd();
...
...
【讨论】:
OP 已经有了[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
的属性 - 它是您发布的流利的属性等价物。我要求看看他们的流利程度,因为它可能有冲突以上是关于ASP.NET MVC 错误 SqlException:当 IDENTITY_INSERT 设置为 OFF 时,无法在表“用户”中插入标识列的显式值的主要内容,如果未能解决你的问题,请参考以下文章
MVC 中的 ASP.NET Identity IUserEmailStore 错误
ASP.Net 5 MVC 6,如何使用共享 Error.cshtml 作为默认错误响应