尝试向用户添加角色时收到ObjectDisposed异常

时间:2019-05-10 16:26:58

标签: asp.net-core asp.net-identity

我试图将现有角色添加到现有用户并收到以下错误:

  

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上做错了什么,我可以被重定向到正确的路径。我很乐意回答任何问题或在需要时添加更多详细信息。

0 个答案:

没有答案