Search code examples
asp.net-coreasp.net-identity

ASP.NET CORE Identity UserManager CreateAsync schema error


When the UserManager.CreateAsync(user, password) in the AccountController.Register() is used to create newly registered user, it always errors out because it tries to insert the record into the AspNetUsers table under mydomain\myNetworkId schema. The AspNetUsers table is in "shared" schema. Is there a way to configure the Identity infrastructure to use designated schema? There are 4 schema (app, admin, shared, and clinical) in my database.

SqlException: Invalid object name 'myDomain\myNetworkID.AspNetUsers'.
Microsoft.Data.SqlClient.SqlCommand+<>c.<ExecuteDbDataReaderAsync>b__164_0(Task<SqlDataReader> result)

[HttpPost]
[ValidateAntiForgeryToken]
public async Task <IActionResult> Register(RegisterViewModel registerModel) {
  if (!ModelState.IsValid) {
    return View();
  }

  CustomIdentityUser user = _mapper.Map<CustomIdentityUser>(registerModel);

  var result = await _userManager.CreateAsync(user, registerModel.Password);
  if (!result.Succeeded) {
    foreach(var error in result.Errors) {
      ModelState.TryAddModelError(error.Code, error.Description);
    }

    return View(registerModel);
  }

  await _userManager.AddToRoleAsync(user, "Visitor");

  return RedirectToAction(nameof(HomeController.Index), "Home");
}


Solution

  • I realized that I had the default schema set at myDomain\myNetworkName schema in the dbContext.OnModeCreating(). I changed it to "shared" like below the UserManager now can create users in the correct schema.

    protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.HasAnnotation("Relational:DefaultSchema", "shared"); /* after rerun EF Power Tools, make sure to change the default schema to shared */