LINQ .ToListAsync在使用两个表时失败

时间:2016-01-13 09:32:11

标签: c# linq

我的功能在不运行异步时工作正常,但当我尝试将其更改为.ToListAsync()时,它失败了

  

" ObjectContext实例已被处理,不再可以   用于需要连接的操作"

以下是失败的......

public async void UpdateNoAction()
{
    await (from r in Context.CodingReview
       from s in Context.UserDetails.Where(s => s.reviewId = r.id)
       where ...
       select new ExtendedDetails(){
           Review = r,
           Spell = s
       }).ToListAsync();
}

Context是一个实体框架数据库连接。返回类型是无效的,所以我实际上得到错误消息而不是静默失败,但稍后将更改为bool。

如果我删除Context.UserDetails部分以进行测试,则可以正常工作。关于它为什么会失败的任何想法?

1 个答案:

答案 0 :(得分:2)

最有可能的问题与async void用法有关。 我想你是在一些其他方法中打开一个连接,并在那个方法中调用此方法并关闭连接。 async void类型方法是fire和forget类型,这意味着在执行完成之前方法返回;那么在此方法完成其操作之前,您的数据库连接可能会被关闭。

将方法签名从public async void UpdateNoAction()更新为public async Task UpdateNoAction()public async Task<List<ExtendedDetails>> UpdateNoAction();那么我猜问题会得到解决。