Получение InvalidOperationException после преобразования из .NET 2 в .NET 3.0 - PullRequest
0 голосов
/ 01 апреля 2019

Я обновил свое веб-приложение .NET 2.0 с .NET 3.0. Теперь он компилируется, но когда я пытаюсь войти в систему, я получаю сообщение об ошибке «InvalidOperationException: невозможно создать DbSet для ApplicationUser», так как этот тип не включен в модель для контекста ». Очевидно, что вызов базы данных не может быть выполнен, но я не вижу, в чем заключается моя ошибка.

Я получил это в Startup.cs (ConfigureServices)

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


   services.AddDefaultIdentity<ApplicationUser>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

Вот мое приложение DBContext.cs:

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

        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
        }
    }

Стек ошибок выглядит следующим образом:

Microsoft.EntityFrameworkCore.Internal.InternalDbSet.get_EntityType () Microsoft.EntityFrameworkCore.Internal.InternalDbSet.CheckState () Microsoft.EntityFrameworkCore.Internal.InternalDbSet.get_EntityQueryable () Microsoft.EntityFrameworkCore.Internal.InternalDbSet.System.Linq.IQueryable.get_Provider () Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteAsync (MethodInfo operatorMethodInfo, источник IQueryable, Выражение выражения, CancellationToken cancellationToken) Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteAsync (MethodInfo operatorMethodInfo, источник IQueryable, Выражение LambdaExpression, CancellationToken cancellationToken) Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.FirstOrDefaultAsync (IQueryable источник, выражение> предикат, CancellationToken CancellationToken) Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserOnlyStore.FindByNameAsync (строка normalizedUserName, Отмена взята Отмена взята) Microsoft.AspNetCore.Identity.UserManager.FindByNameAsync (строка Username) Microsoft.AspNetCore.Identity.SignInManager.PasswordSignInAsync (строка имя пользователя, пароль строки, bool isPersistent, блокировка boolOnFailure) ImSmart.Controllers.AccountController.Login (модель LoginViewModel, строка returnUrl) в AccountController.cs + var result = await _signInManager.PasswordSignInAsync (model.Email, model.Password, false, lockoutOnFailure: true); Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor + TaskOfIActionResultExecutor.Execute (IActionResultTypeMapper маппер, исполнитель ObjectMethodExecutor, контроллер объекта, объект [] аргументы)

Чего мне не хватает?

1 Ответ

0 голосов
/ 04 апреля 2019

Наконец, ответом было вернуться к IdentityUser вместо ApplicationUser.Это означало, что мне также приходилось везде менять код, где я использовал SignInManager<ApplicationUser> и UserManager<ApplicationUser> на SignInManager<IdentityUser> и UserManager<IdentityUser>.

После этих изменений вход в систему работает нормально.

...