Почему ASP.NET Identity не заполняет второго пользователя при обновлении базы данных? - PullRequest
0 голосов
/ 09 октября 2018

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

Для простоты я удалил большинство полей, которые я "м добавив.Достаточно сказать, что оба пользователя имеют значения в одних и тех же столбцах, и поэтому не должно быть конфликта в том, что столбец является нулевым, и его следует заполнить.

var userStore = new UserStore<ApplicationUser>(context);
var userManager = new ApplicationUserManager(userStore);
var user = new ApplicationUser
{
    Email = "ortund@fudge.com",
    UserName = "ortund"
};
userManager.Create(user, "moomin");
userManager.AddToRole(user.Id, nameof(Helpers.Roles.ForumAdmin));

user = new ApplicationUser
{
   Email = "ilu@fudge.com",
   UserName = "Ilüvatar"
};
userManager.Create(user, "Ly@12157114");
userManager.AddToRole(user.Id, nameof(Helpers.Roles.ForumUser));

Таким образом, добавляется штраф «ortund» для пользователя и добавляетсяпользователь с ролью ForumAdmin вполне в порядке, но строка, где происходит это добавление к роли, проходит через InvalidOperationException, говорящую UserId not found.

Что происходит?Я не понимаю, какой идентификатор пользователя он ищет гораздо меньше, почему он не может его найти ...

Вот полная трассировка стека:

System.InvalidOperationException: UserId not found.
   at Microsoft.AspNet.Identity.UserManager`2.<AddToRoleAsync>d__83.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Identity.AsyncHelper.RunSync[TResult](Func`1 func)
   at Microsoft.AspNet.Identity.UserManagerExtensions.AddToRole[TUser,TKey](UserManager`2 manager, TKey userId, String role)
   at Forum.Migrations.Configuration.Seed(ApplicationDbContext context) in E:\Development\Backup\Git\fudge\Forum\Migrations\Configuration.cs:line 54
   at System.Data.Entity.Migrations.DbMigrationsConfiguration`1.OnSeed(DbContext context)
   at System.Data.Entity.Migrations.DbMigrator.SeedDatabase()
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.SeedDatabase()
   at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
   at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b()
   at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
   at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run()
   at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
   at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
   at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
...