wes*_*and 6 c# entity-framework asp.net-identity asp.net-core
我正在尝试编写一个控制器,它接收来自AJAX调用的请求,并通过DBContext执行对数据库的一些调用.但是,当我将命令var user = await GetCurrentUserAsynch();
放在对DBContext的任何调用之前时,如下所示,我得到一个ObjectDisposedException(无法访问已处置的对象).
它似乎是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);
Run Code Online (Sandbox Code Playgroud)
sel*_*ape 25
声明你的控制器动作async Task
,而不是async void
.
对于后者,只要你的方法遇到第一个await
,它就会将控制权返回给调用者,并且因为ASP.NET现在无法跟踪它的进度(就像它返回的Task
那样),它会处理你的控制器实例和(最有可能的)以及任何本地范围的字段.
当你在那里时,无论如何你都是异步方法,你应该更喜欢EF调用的异步版本; 即await _db.MapItems.SingleOrDefaultAsync()
归档时间: |
|
查看次数: |
3233 次 |
最近记录: |