2016-01-13 111 views
2

MY功能正常工作時不運行的異步但是當我嘗試通過改變它.ToListAsync()它失敗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(); 
} 

上下文是一個實體框架數據庫連接。返回類型是無效的,所以我實際上得到了錯誤信息,而不是以失敗告終,但稍後會被更改爲bool。

如果我爲了測試目的刪除Context.UserDetails部分,它可以正常工作。任何想法,爲什麼它會失敗?

+0

向我們展示您的完整方法。 –

+0

'Context'的生命週期是什麼? –

+0

你的情況是什麼情況?它似乎是一個數據庫連接,並且在異步方法完成之前關閉/處理它。 – Slupka

回答

2

最有可能的問題是與async void的使用有關。 我想你打開一個其他方法的連接,並調用該方法,並關閉連接。 async void類型的方法是fire和forget類型,這意味着在執行之前是完整的方法返回;那麼在此方法完成其操作之前,您的數據庫連接可能會關閉。

將方法簽名從public async void UpdateNoAction()更新爲public async Task UpdateNoAction()public async Task<List<ExtendedDetails>> UpdateNoAction();那麼我猜這個問題會解決。

+0

更改類型確實會停止顯示錯誤消息,但是查詢只是靜默地失敗。 –

+0

你可以只調試和檢查函數沒有async關鍵字正確返回(移除異步關鍵字和更改ToListAsync ToList)? – daryal

+0

舉起來,你是點爆炸,我不會使父函數異步,它也是返回類型void。改變了這一點,它再次正常工作。謝謝 :) –