从.NET 2转换为.NET 3.0后获得InvalidOperationException

时间:2019-04-01 02:57:47

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

我从.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);
        }
    }

错误堆栈的内容如下:

  

Microsoft.EntityFrameworkCore.Internal.InternalDbSet.get_EntityType()   Microsoft.EntityFrameworkCore.Internal.InternalDbSet.CheckState()   Microsoft.EntityFrameworkCore.Internal.InternalDbSet.get_EntityQueryable()   Microsoft.EntityFrameworkCore.Internal.InternalDbSet.System.Linq.IQueryable.get_Provider()   Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteAsync(MethodInfo operatorMethodInfo,IQueryable源,   表达式表达式,CancellationToken取消Token)   Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteAsync(MethodInfo operatorMethodInfo,IQueryable源,   LambdaExpression表达式,CancellationToken取消Token)   Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.FirstOrDefaultAsync(IQueryable   源,表达式>谓词,CancellationToken   cancelToken)   Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserOnlyStore.FindByNameAsync(string normalizedUserName,   CancellationToken取消令牌)   Microsoft.AspNetCore.Identity.UserManager.FindByNameAsync(string   用户名)   Microsoft.AspNetCore.Identity.SignInManager.PasswordSignInAsync(string   userName,字符串密码,bool为Persistent,bool lockoutOnFailure)   ImSmart.Controllers.AccountController.Login(LoginViewModel模型,   AccountController.cs中的字符串returnUrl)   +                   var result = await _signInManager.PasswordSignInAsync(model.Email,model.Password,false,lockoutOnFailure:true);   Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor + TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper   映射器,ObjectMethodExecutor执行程序,对象控制器,对象[]   参数)

我可能会缺少什么?

1 个答案:

答案 0 :(得分:0)

最后,答案是回到IdentityUser而不是ApplicationUser。 这意味着我还必须在使用SignInManager<ApplicationUser>UserManager<ApplicationUser>SignInManager<IdentityUser>UserManager<IdentityUser>的代码中进行各处更改。

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