使用ASP .NET Core Identity和EntityFrameworkCore注册新用户时出现InvalidOperationException

我正在关注使用Identity的文档 ,我正在尝试注册一个新用户(执行注册操作),但它失败并出现以下错误:

InvalidOperationException:无法为“ApplicationUser”创建DbSet,因为此类型未包含在上下文的模型中。

启动:

services.AddIdentity(options => { //password options options.Password.RequireDigit = false; // ... }) 

我使用的是标准的ApplicationUser:

 public class ApplicationUser : IdentityUser { } 

在AccountController中注册操作:

 public async Task Register(RegisterViewModel viewModel) { if (ModelState.IsValid) { var user = new ApplicationUser { UserName = viewModel.UserName, Email = viewModel.Email }; var result = await _userManager.CreateAsync(user, viewModel.Password); //<-- Exception happens here if (result.Succeeded) { await _signInManager.SignInAsync(user, isPersistent: false); _logger.LogInformation(3, "User created a new account with password."); return RedirectToAction(nameof(HomeController.Index), "Home"); } string errorData = ""; foreach (var error in result.Errors) { errorData += error.Description + '\n'; } StoreErrorMessage("Failed to create the user!", errorData); } return View(viewModel); } 

我已经尝试过以下方法:

  • DbSet添加到DbSet
  • 我确实通过dotnet ef创建并应用了新的迁移

我发现了问题。 我的ApplicationContextinheritance自DbContext 。 我将其更改为IdentityDbContext并且它可以工作。

创建inheritanceIdentityDbContext的新上下文类。

 public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext(DbContextOptions options) : base(options) { } protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); // Customize the ASP.NET Identity model and override the defaults if needed. // For example, you can rename the ASP.NET Identity table names and more. // Add your customizations after calling base.OnModelCreating(builder); } } 

并在startup.cs文件中添加以下代码

 services.AddDbContext(options => options.UseSqlServer(connection)); 

这将帮助您实现数据库优先。