【问题标题】:Getting InvalidOperationException after conversion from .NET 2 to .NET 3.0从 .NET 2 转换为 .NET 3.0 后出现 InvalidOperationException
【发布时间】:2019-04-04 08:30:04
【问题描述】:

我从 .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 cancelToken) Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteAsync(MethodInfo operatorMethodInfo,IQueryable 源, LambdaExpression 表达式,CancellationToken cancelToken) Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.FirstOrDefaultAsync(IQueryable 源,表达式>谓词,CancellationToken 取消令牌) Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserOnlyStore.FindByNameAsync(字符串 normalizedUserName, CancellationToken 取消令牌) Microsoft.AspNetCore.Identity.UserManager.FindByNameAsync(字符串 用户名) Microsoft.AspNetCore.Identity.SignInManager.PasswordSignInAsync(字符串 用户名、字符串密码、bool isPersistent、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 执行器,对象控制器,对象[] 论据)

我可能缺少什么?

【问题讨论】:

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


    【解决方案1】:

    最后的答案是回到IdentityUser 而不是ApplicationUser。 这意味着我还必须将代码中使用 SignInManager&lt;ApplicationUser&gt; 和 UserManager&lt;ApplicationUser&gt; 的地方更改为 SignInManager&lt;IdentityUser&gt; 和 UserManager&lt;IdentityUser&gt;。

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

    【讨论】:

      猜你喜欢
      • 2023-02-21
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-17
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      相关资源
      最近更新 更多