5

我有这个查询:

 // _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()

这没有任何意义。我该如何解决这个问题?

4

1 回答 1

0

根据您对我的评论的回复:

有一些中等重量的活动预计会在几秒钟内完成,但我想可能需要更长时间。你认为会发生超时吗?

我想这是一个超时或类似的东西。您可以增加 timeout,或者您可以强制它评估并存储在内存中以供以后处理。您可以通过ToArray()在查询末尾添加:

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

看看是否有帮助。

于 2012-05-16T08:10:30.793 回答