试图登录到ASP时出错.. NET标识2,列UserId无效

本文关键字:标识 无效 UserId NET 出错 登录 ASP | 更新日期: 2023-09-27 18:05:13

经过大量的时间与ASP工作。最后,我有一些空闲时间来研究Identity,并尝试升级我们的开发框架来使用它。

所以…我正在阅读很多关于这个问题的信息和教程,并试图把它付诸实践。

此时,我已经能够将用户注册到数据库并为他们分配角色。我还更改了模型,以区分用户帐户的用户名和电子邮件,因为通常在我们的应用程序中,我们不使用电子邮件帐户进行用户标识。

然而,我在登录上遇到了瓶颈。当控制器尝试执行PasswordSignInAsync时,我收到一个未处理的异常,如:

System.Data.SqlClient。列名"UserId"无效。列名'UserId'无效。

我完全失去了这个问题,我不知道那些UserId列是从哪里来的(数据库模型上唯一的是AspNetUserRoles和AspNetUserLogins),或者为什么他们在查询执行期间没有被识别。

这是控制器的登录动作:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) {
        if (!ModelState.IsValid) {
            return View(model);
        }
        var result = await SignInManager.PasswordSignInAsync(model.username, model.Password, model.RememberMe, shouldLockout: true);
        switch (result) {
            case SignInStatus.Success:
                return RedirectToLocal(returnUrl);
            case SignInStatus.LockedOut:
                return View("Lockout");
            case SignInStatus.RequiresVerification:
                return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
            case SignInStatus.Failure:
            default:
                ModelState.AddModelError("", "Login error.");
                return View(model);
        }
    }

对基本项目的唯一更改是我更改了来自model的调用的第一个参数。Email给model.username.

任何关于问题的见解,如何跟踪或修复它将不胜感激。

试图登录到ASP时出错.. NET标识2,列UserId无效

问题可能是您的数据库与代码所期望的数据库模型不匹配。

这是ASP。. NET身份数据库由代码优先在全新的ASP. NET中生成。. NET MVC项目与Identity from VS2013:

CREATE TABLE [dbo].[AspNetRoles] ( 
[Id] [nvarchar](128) NOT NULL, 
[Name] [nvarchar](256) NOT NULL, 
CONSTRAINT [PK_dbo.AspNetRoles] PRIMARY KEY ([Id]) 
) 
CREATE UNIQUE INDEX [RoleNameIndex] ON [dbo].[AspNetRoles]([Name]) 
CREATE TABLE [dbo].[AspNetUserRoles] ( 
[UserId] [nvarchar](128) NOT NULL, 
[RoleId] [nvarchar](128) NOT NULL, 
CONSTRAINT [PK_dbo.AspNetUserRoles] PRIMARY KEY ([UserId], [RoleId]) 
) 
CREATE INDEX [IX_UserId] ON [dbo].[AspNetUserRoles]([UserId]) 
CREATE INDEX [IX_RoleId] ON [dbo].[AspNetUserRoles]([RoleId]) 
CREATE TABLE [dbo].[AspNetUsers] ( 
[Id] [nvarchar](128) NOT NULL, 
[Email] [nvarchar](256), 
[EmailConfirmed] [bit] NOT NULL, 
[PasswordHash] [nvarchar](max), 
[SecurityStamp] [nvarchar](max), 
[PhoneNumber] [nvarchar](max), 
[PhoneNumberConfirmed] [bit] NOT NULL, 
[TwoFactorEnabled] [bit] NOT NULL, 
[LockoutEndDateUtc] [datetime], 
[LockoutEnabled] [bit] NOT NULL, 
[AccessFailedCount] [int] NOT NULL, 
[UserName] [nvarchar](256) NOT NULL, 
CONSTRAINT [PK_dbo.AspNetUsers] PRIMARY KEY ([Id]) 
) 
CREATE UNIQUE INDEX [UserNameIndex] ON [dbo].[AspNetUsers]([UserName]) 
CREATE TABLE [dbo].[AspNetUserClaims] ( 
[Id] [int] NOT NULL IDENTITY, 
[UserId] [nvarchar](128) NOT NULL, 
[ClaimType] [nvarchar](max), 
[ClaimValue] [nvarchar](max), 
CONSTRAINT [PK_dbo.AspNetUserClaims] PRIMARY KEY ([Id]) 
) 
CREATE INDEX [IX_UserId] ON [dbo].[AspNetUserClaims]([UserId]) 
CREATE TABLE [dbo].[AspNetUserLogins] ( 
[LoginProvider] [nvarchar](128) NOT NULL, 
[ProviderKey] [nvarchar](128) NOT NULL, 
[UserId] [nvarchar](128) NOT NULL, 
CONSTRAINT [PK_dbo.AspNetUserLogins] PRIMARY KEY ([LoginProvider], [ProviderKey], [UserId]) 
) 
CREATE INDEX [IX_UserId] ON [dbo].[AspNetUserLogins]([UserId]) 
ALTER TABLE [dbo].[AspNetUserRoles] ADD CONSTRAINT [FK_dbo.AspNetUserRoles_dbo.AspNetRoles_RoleId] FOREIGN KEY ([RoleId]) REFERENCES [dbo].[AspNetRoles] ([Id]) ON DELETE CASCADE 
ALTER TABLE [dbo].[AspNetUserRoles] ADD CONSTRAINT [FK_dbo.AspNetUserRoles_dbo.AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [dbo].[AspNetUsers] ([Id]) ON DELETE CASCADE 
ALTER TABLE [dbo].[AspNetUserClaims] ADD CONSTRAINT [FK_dbo.AspNetUserClaims_dbo.AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [dbo].[AspNetUsers] ([Id]) ON DELETE CASCADE 
ALTER TABLE [dbo].[AspNetUserLogins] ADD CONSTRAINT [FK_dbo.AspNetUserLogins_dbo.AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [dbo].[AspNetUsers] ([Id]) ON DELETE CASCADE

将您的数据库与此结构进行比较,它应该可以工作:)