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 に答える