4

我有這個疑問:「無效的嘗試時,不存在數據讀取」開始對查詢結果foreach循環時

// _db derives from DbContext 
var toProcess = from jobItem in _db.Jobs 
       where jobItem.State == desiredState 
       select jobItem.ItemId; 
foreach (Guid itemId in toProcess) //exception thrown on this line 
{ 
    // whatever 
} 

其中大部分時間運行正常,但過一段時間用線foreach將拋出:

System.InvalidOperationException:無效嘗試讀取時不存在數據

和以下堆棧跟蹤:

System.Data.SqlClient.SqlDataReader.ReadColumnHeader(Int32 i) 
System.Data.SqlClient.SqlDataReader.IsDBNull(Int32 i) 
System.Data.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal) 
System.Data.Common.Internal.Materialization.Shaper.GetColumnValueWithErrorHandling[TColumn](Int32 ordinal) 
System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper) 
System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext() 

這沒有任何意義。我該如何解決這個問題?

+0

這是一個非常奇怪的錯誤;看起來像某種內部混亂檢查行;這是使用什麼版本的.NET? –

+0

@Marc Gravell:這是4.0版 – sharptooth

+0

而EF的版本是什麼? 4.0,4.1,4.2,4.3?你有沒有試過更新? – abatishchev

回答

0

按照您迴應我的評論:

有,預計將 在幾秒鐘內做了一些中等重量的活動,但我想這可能需要更長的時間。你認爲暫停 會發生嗎?

我想這是一個超時或類似的東西。您可以增加超時,或者您可以只需強制它評估並將其存儲在內存中供以後處理。您可以通過在查詢的末尾添加ToArray()做到這一點:

var toProcess = (from jobItem in _db.Jobs 
       where jobItem.State == desiredState 
       select jobItem.ItemId).ToArray(); 

看看是否有幫助。

相關問題