В этой статье кратко описано, как зарегистрировать/создать пользователя в базе данных с помощью EntityFrameworkCore в Asp.Net Core 6.
Репозиторий Github:JWT-Authentication-Template

Создать новый проект
Откройте Visual Studio и выберите Создать новый проект.

В шаблонах выберите ASP.NET Core Web Api.

Оставьте настройки по умолчанию и нажмите «Создать».

Установочные пакеты
Microsoft.AspNetCore.Identity.EntityFrameworkCore v6.0.16
Microsoft.EntityFrameworkCore.SqlServer v6.0.16
Microsoft.EntityFrameworkCore.Tools v6.0.16

Установите соединение с SQL Server
Создайте папку с именем Models на корневом уровне.
В папке Models создайте ApplicationDbContext, который наследует класс IdentityDbContext.

public class ApplicationDbContext : IdentityDbContext
{
  public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { }
}

Добавьте строку подключения к базе данных в appsettings.json.

"ConnectionStrings": {
    "DefaultConnection": "Server=<Your-Server-Name>;Database=<Your-Database-Name>;Trusted_Connection=True;MultipleActiveResultSets=true"
  }

Обновите Program.cs, чтобы использовать SQL Server.

builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

Чтобы использовать сущности EntityFramework по умолчанию и установить соединение с SQL Server, выполните:

>Add-Migration "<Migration-Name>"
>Update-Database

Создайте класс ApplicationUser в папке Models, который расширяет таблицу AspNetUsers, добавляя поле Name.

public class ApplicationUser : IdentityUser
{
  public string Name { get; set; }
}

Обновите ApplicationDbContext, включив в него расширенный класс ApplicationUser.

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
  public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { }
}

Добавьте следующую ссылку в Program.cs, чтобы привязать ApplicationUser к использованию ApplicationDbContext в качестве хранилища данных.

builder.Services.AddIdentity<ApplicationUser, IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();

Примечание. IdentityRole — это поле по умолчанию. Позже вы можете расширить код, включив в него другие роли, вызвав AddRoles.

Обновите базу данных, добавив миграцию,

>Add-Migration "<Migration-Name>"
>Update-Database

Создать/зарегистрировать пользователя
Создайте папку с именем Службы. Добавьте в Services еще одну папку с именем UserRepositories.
Добавьте интерфейс в UserRepositories и назовите его IUserRepository.

public interface IUserRepository
{
  Task<ApplicationUser> GetByEmail(string email);
  Task<ApplicationUser> GetByUsername(string username);
}

Добавьте класс в UserRepositories, который реализует описанный выше интерфейс, назовите его UserRepository.

public class UserRepository : IUserRepository
{
  private readonly ApplicationDbContext _Context;
  public UserRepository(ApplicationDbContext Context)
  {
    _Context = Context;
  }
  public Task<ApplicationUser> GetByEmail(string email)
  {
   return Task.FromResult(_Context.Users.FirstOrDefault(u => u.Email == email));
  }

  public Task<ApplicationUser> GetByUsername(string username)
  {
    return Task.FromResult(_Context.Users.FirstOrDefault(u => u.UserName == username));
  }
}

Обновите Program.cs, чтобы разрешить IUserRepository и использовать внедрение зависимостей.

builder.Services.AddScoped<IUserRepository, UserRepository>();

Добавьте новую папку в Services с именем Handler.
Добавьте новый класс с именем ErrorHandler в Handler. папка.

public class ErrorHandler
{
  public IEnumerable<string> ErrorMessages { get; set; }
  public ErrorHandler(string errorMessage) : this(new List<string>() { errorMessage }) { }
  public ErrorHandler(IEnumerable<string> errorMessages)
  {
    ErrorMessages = errorMessages;
  }
}

Создайте новую папку с именем Dto в папке Models и новый класс с именем RegisterDto. Он будет содержать поля, необходимые для регистрации пользователя.

public class RegisterDto
{
  public string Name { get; set; }
  public string Email { get; set; }
  public string UserName { get; set; }
  public string Password { get; set; }
}

В папке Controllers добавьте новый контроллер API с именем AuthenticationController. К этому добавьте Post Api, который реализует IUserRepository и включает регистрацию пользователей.

[Route("api/[controller]")]
[ApiController]
public class AuthenticationController : ControllerBase
{
  private readonly IUserRepository _userRepository;
  UserManager<ApplicationUser> _userManager;
  public AuthenticationController(IUserRepository userRepository, UserManager<ApplicationUser> userManager)
  {
    _userRepository = userRepository;
    _userManager = userManager;
  }
  [HttpPost]
  [Route("RegisterUser")]
  public async Task<IActionResult> Register([FromBody] RegisterDto value)
  {
    if (!ModelState.IsValid)
    {
      return BadRequestModelState();
    }

    ApplicationUser existingUserName = await _userRepository.GetByUsername(value.UserName);
    if ((existingUserName != null))
    {
      return Conflict(new ErrorHandler("Username already exists."));
    }

    ApplicationUser existingEmail = await _userRepository.GetByEmail(value.Email);
    if (existingEmail != null)
    {
      return Conflict(new ErrorHandler("Email already exists."));
    }

    var user = new ApplicationUser
    {
      UserName = value.UserName,
      Email = value.Email,
      Name = value.Name
    };
    await _userManager.CreateAsync(user, value.Password);
    return Ok();
  }

  private IActionResult BadRequestModelState()
  {
    IEnumerable<string> errorMessages = ModelState.Values.SelectMany(v => v.Errors.Select(e => e.ErrorMessage));
    return BadRequest(new ErrorHandler(errorMessages));
  }
}

Вот и все, Программа готова зарегистрировать пользователя.

Запустите приложение и откройте Postman, чтобы проверить маршрут регистрации.
Передайте JSON в тексте запроса и нажмите «Отправить».

Сервер отвечает статусом 200 Ok, что указывает на то, что пользователь успешно зарегистрирован.