«Невозможно создать DbSet для IdentityUser, этот тип не включен в модель для контекста» в ASP.Net Core 7 MVC

Сначала немного информации обо мне

  • Компьютер: Макбук Про 2019 г.
  • Версия ядра .NET: 7
  • Тип проекта ASP.Net: ASP.Net Core MVC
  • IDE: Код Visual Studio

Проблема

Если вы используете пользовательскую модель для IdentityUser, вам необходимо создать пользовательскую модель (т. е. «ApplicationUser»), а затем расширить IdentityUser следующим образом:

      using System;
using Microsoft.AspNetCore.Identity;

namespace App.Models
{
    public class ApplicationUser : IdentityUser
    {
        // TODO: Write my custom fields, relations, etc.
    }
}

Затем вы переходите в контекст вашей базы данных (т. е. «ApplicationDbContext»), который обычно находится в папке «Данные».

      using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using App.Models;
using Microsoft.AspNetCore.Identity;

namespace App.Data;

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

В этом случае вы устанавливаете ApplicationUser в качестве переопределения для IdentityUser.

Итак, как только вы это сделали и побежалиdotnet ef migrations add <your-migration-name>иdotnet ef database update, вы запускаете отладчик в Visual Studio Code, Visual Studio или любой другой среде IDE, в которой вы кодируете, и сайт появляется перед вами.

Проблема, с которой вы сейчас сталкиваетесь, заключается в том, что когда вы пытаетесь войти в систему как существующий пользователь или зарегистрироваться как новый, вы сталкиваетесь с чем-то похожим на этот экран.

Что мне делать?

1 ответ

Вы должны войти в_LoginPartial.cshtmlи изменить впрыски:

От

      @using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager

К

      @using Microsoft.AspNetCore.Identity
@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager

Также

В моей версии у меня нетStartup.csфайл. Вместо этого у меня есть синглProgram.csфайл. В этом файле вы должны найти:

      
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();

И измените его на:

      
builder.Services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();

Затем перезапустите отладчик, и у пользовательской части вашего сайта больше не должно быть проблем.

Другие вопросы по тегам