【发布时间】:2018-05-02 22:29:24
【问题描述】:
我在 asp.net core mvc 中有一个简单的项目,我正在尝试将声明分配给指定的用户。当我创建一个新用户并分配一个声明时,一切正常,但是当我尝试通过 id 获取用户,然后分配一个声明时,它会抛出:
System.ObjectDisposedException: '无法访问已处置的对象。此错误的一个常见原因是释放从依赖注入中解析的上下文,然后尝试在应用程序的其他地方使用相同的上下文实例。如果您在上下文上调用 Dispose() 或将上下文包装在 using 语句中,则可能会发生这种情况。如果你使用依赖注入,你应该让依赖注入容器负责处理上下文实例。'
我不确定我应该做什么。尝试了“使用”等不同的东西,但似乎没有任何帮助。问题在于 AddClaimAsync。
var claim = new Claim(model.ClaimName, "True");
var user = _userManager.Users.SingleOrDefault(x => x.Id == model.UserId);
if (model.ClaimValue)
{
await _userManager.AddClaimAsync(user, claim);
}
else
{
await _userManager.RemoveClaimAsync(user, claim);
}
await _applicationDbContext.SaveChangesAsync();
至于 _applicationDbContext,这是通过 DI 传递给服务的 db 上下文。
如果您有任何想法,如果您能分享,我将非常感谢。
【问题讨论】:
-
“问题出在 AddClaimAsync 上。”那你为什么不给我们看那个代码呢?当您使用它时,可能会显示更多
_userManager。似乎您在不应该的情况下在其中放置了一个上下文(或者更确切地说,在您应该使用新的时尝试访问一个)。 -
您是否在应用程序中的任何位置部署 _applicationDbContext?
-
您使用什么数据库提供商?
-
AddClaimAsync 和 UserManager 只是 asp.net 提供的标准类。我没有创造它们。我没有处理 _applicationDbContext,我正在使用带有身份和实体框架核心的 MSSQL Server。
-
你能展示一下周围的类,你是如何注入上下文和用户管理器的,还告诉我们这个类是如何自己注册的(以及它在哪里使用)?
标签: c# asp.net-core entity-framework-core asp.net-core-identity