我正在尝试使用 .ToListAsync()
在 DbContext 的 using 语句中获取 linq 查询结果,代码:
private async Task<List<String>> GetEntiteesAsync()
{
Task<List<String>> returnValue;
using (var entities = new REPORTEntities())
{
returnValue = (from user in entities.USERs
group user by user.entite into g
select g.Key).ToListAsync();
}
return await returnValue;
}
运行时,我得到“ObjectContext 实例已被释放,不能再用于需要连接的操作。”如图所示 :
我想这是由于在 returnValue 对象仍然以列表的形式异步接收对象时 Context 已被释放,是否有解决方法可以在保留 using 语句的同时避免此错误,或者我应该这样做:
private async Task<List<String>> GetEntiteesAsync()
{
Task<List<String>> returnValue;
var entities = new REPORTEntities()
returnValue = (from user in entities.USERs
group user by user.entite into g
select g.Key).ToListAsync();
return await returnValue;
}
最佳答案
您将在 using
操作完成之前离开 ToListAsync
作用域,因为您没有等待异步任务,这意味着 entities
被释放得太快(因此对象已释放异常)。
您应该只在范围内返回结果,async-await
机制将确保在操作异步完成后调用 Dispose
:
private async Task<List<String>> GetEntiteesAsync()
{
using (var entities = new REPORTEntities())
{
return await (from user in entities.USERs
group user by user.entite into g
select g.Key).ToListAsync();
}
}
关于c# - ToListAsync() 在 DbContext 中使用语句 : "The ObjectContext disposed", 如何处理?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27214182/