我试图将现有角色添加到现有用户并收到以下错误:
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上做错了什么,我可以被重定向到正确的路径。我很乐意回答任何问题或在需要时添加更多详细信息。