17

我已将代码从 ASP.NET Core 2.0 升级到 Core 2.1。我创建了一个新的 Core 2.1 项目并将我的代码移动到新项目中。我提供了我的创业样本和ApplicationDbContext

尝试登录时出现以下错误

无法为“IdentityUser”创建 DbSet,因为此类型未包含在上下文模型中。Microsoft.EntityFrameworkCore.Internal.InternalDbSet.get_EntityType()

启动.cs

//Core 2.1
  services.AddDefaultIdentity<IdentityUser>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();            

////Old Core 2.0 Code
  //services.AddIdentity<ApplicationUser, IdentityRole>()
        //    .AddEntityFrameworkStores<ApplicationDbContext>()
        //    .AddDefaultTokenProviders();

ApplicationDbContext.cs

public partial class ApplicationDbContext : 
    IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> 
 options)
        : base(options)
    {
        Database.EnsureCreated();
     }
 }

我查看了以下 Microsoft 文章: https ://blogs.msdn.microsoft.com/webdev/2018/05/30/asp-net-core-2-1-0-now-available/

https://docs.microsoft.com/en-us/aspnet/core/migration/20_21?view=aspnetcore-2.1

4

4 回答 4

30

尝试更改public partial class ApplicationDbContext : IdentityDbContext<ApplicationUser>public partial class ApplicationDbContext : IdentityDbContext<IdentityUser>

编译器将生成具有提供给泛型类的类型的DbSet 。IdentityDbContext<TUser>

于 2018-06-07T15:49:22.827 回答
17

从您的 startup.cs 更改

services.AddDefaultIdentity<IdentityUser>()

services.AddDefaultIdentity<ApplicationUser>()
于 2018-10-12T07:42:23.860 回答
6

作为后续行动:为了避免下一个可能的问题,一旦这里被修复:您还必须更改Views\Shared_LoginPartial.cshtml

@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager

@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager
于 2018-12-22T20:19:07.857 回答
-1

更改ApplicationDbContext为:

private static bool _Created = false;

public ApplicationDbContext()
{
    if (!_Created)
    {
        _Created = true;
        Database.EnsureCreated();

    }
}

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseSqlServer(@"server = .\SQLSERVER; initial catalog = DBName; Integrated Security = True; MultipleActiveResultSets = True; App = EntityFramework & quot; ");
}

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
}
于 2019-05-06T19:54:19.743 回答