Получение исключения ObjectDisposed при попытке добавить роль пользователю - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь добавить существующую роль к существующему пользователю и получаю следующую ошибку:

System.ObjectDisposedException: 'Невозможно получить доступ к удаленному объекту. Распространенной причиной этой ошибки является удаление контекста, который был разрешен путем внедрения зависимости, а затем попытка использовать тот же экземпляр контекста в другом месте вашего приложения. Это может произойти, если вы вызываете Dispose () для контекста или заключаете контекст в оператор using. Если вы используете внедрение зависимостей, вы должны позволить контейнеру внедрения зависимостей избавиться от экземпляров контекста. '

Из-за структуры нашей таблицы мы не используем идентификацию по умолчанию, поэтому я работаю над созданием методов по ходу дела. Я предполагаю, что моя проблема из-за недостатка знаний о том, как именно работает EF. Когда я перемещаю код создания из моего UserStore в мой Startup, он просто отлично сохраняет.

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

Это функция из UserStore.cs

public async Task AddToRoleAsync(SecUser user, string roleName, CancellationToken cancellationToken)
    {
      SecRole role = null;

      try
      {
        role = db.SecRoles.Where(x => x.SecRoleName == roleName).Single();
      }
      catch (Exception ex)
      {
        throw ex;
      }

      SecUserRole newUserRole = new SecUserRole();
      newUserRole.SecUserId = user.SecUserId;
      newUserRole.SecRoleId = role.SecRoleId;
      newUserRole.SiteId = user.SiteId;
      newUserRole.CreatedBy = 1; //Change to Current User ID
      newUserRole.CreatedByProgram = "eCLERC";
      newUserRole.CreatedTimestamp = DateTime.Now;
      newUserRole.ChangedBy = 1;  //Change to Current User ID
      newUserRole.ChangedByProgram = "eCLERC";
      newUserRole.ChangedTimestamp = DateTime.Now;

      db.Add(newUserRole);
      await db.SaveChangesAsync();
    }

строка из моей функции создания

var temp = await UserManager.AddToRoleAsync(user, "SupportAdmin");

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

...