如何使用 Entity Framework 和 Identity 解决对象处置异常 ASP.NET Core

2024-05-11

我正在尝试编写一个控制器,该控制器接收来自 AJAX 调用的请求并通过 DBContext 对数据库执行一些调用。但是,当我发出命令时var user = await GetCurrentUserAsynch();在对 DBContext 的任何调用之前,如下所示,我收到一个 ObjectDisposeException(无法访问已处置的对象)。

看来 UserManager 和 DBContext 不能很好地配合,但是我找不到关于此事的太多信息。

[HttpPost]        
public async void EditUserMapItemAjax([FromBody]UserMapItemViewModel userMapItemViewModel)
{            
    var user = await GetCurrentUserAsync();
    var mapItem = _db.MapItems.SingleOrDefault(x => x.Id == userMapItemViewModel.MapItemId);   

    ...
}

private Task<ApplicationUser> GetCurrentUserAsync() => _userManager.GetUserAsync(HttpContext.User);

将您的控制器操作声明为async Task, not async void.

对于后者,一旦你的方法达到第一个await,它将控制返回给调用者,并且因为 ASP.NET 现在无法跟踪其进度(就像它返回Task相反),它会处理您的控制器实例,以及(最有可能)随之而来的任何本地范围的字段。


当您在那里时,由于您无论如何都处于异步方法中,因此您应该更喜欢 EF 调用的异步版本; IE。await _db.MapItems.SingleOrDefaultAsync()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Entity Framework 和 Identity 解决对象处置异常 ASP.NET Core 的相关文章

随机推荐