首页 > 解决方案 > 从 .NET 2 转换为 .NET 3.0 后出现 InvalidOperationException

问题描述

我从 .NET 3.0 升级了我的 .NET 2.0 Web 应用程序。它现在可以编译,但是当我尝试登录时出现错误“InvalidOperationException:无法为 'ApplicationUser' 创建 DbSet,因为此类型未包含在上下文模型中”。显然无法完成对数据库的调用,但我看不出我的错误是什么。

我在 Startup.cs (ConfigureServices) 中得到了这个

services.AddDbContext<ApplicationDbContext>(options =>
  options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));


   services.AddDefaultIdentity<ApplicationUser>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

这是我的 ApplicationDBContext.cs:

public class ApplicationDbContext : IdentityDbContext
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
        }
    }

错误堆栈如下所示:

CancellationToken cancelToken) Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserOnlyStore.FindByNameAsync(string normalizedUserName, CancellationToken cancelToken) Microsoft.AspNetCore.Identity.UserManager.FindByNameAsync(string userName) Microsoft.AspNetCore.Identity.SignInManager.PasswordSignInAsync(string userName, string password, bool isPersistent, bool lockoutOnFailure) ImSmart.Controllers.AccountController.Login(LoginViewModel model, string returnUrl) in AccountController.cs + var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, false, lockoutOnFailure: true); Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor+TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper 映射器,ObjectMethodExecutor 执行器,对象控制器,

我可能会错过什么?

标签: c#asp.net-identityasp.net-core-3.0

解决方案


最后的答案是回到IdentityUser而不是ApplicationUser。这意味着我还必须在我使用SignInManager<ApplicationUser>UserManager<ApplicationUser>toSignInManager<IdentityUser>UserManager<IdentityUser>.

在这些更改之后,登录工作正常。


推荐阅读