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 MVC 是 MVC 架构模式的错误实现吗?

ASP.NET MVC 处理错误

ASP.Net 5 MVC 6,如何使用共享 Error.cshtml 作为默认错误响应

ASP.NET MVC 错误处理 - 删除 aspxerrorpath

ASP.Net 5 MVC6 选择 taghelper 产生错误的输出