2016-09-26 2 views
0

EFからストアドプロシージャを呼び出してレコードを削除し、すぐにクエリを呼び出して残りのレコードを取得します。そのクエリはエラーにEntity Frameworkエラー "シーケンスに要素がありません"、プロシージャからの削除ステートメントが実行されました

を投げされ、それにSingle()を使用してシーケンスに要素

が含まれていません。しかし、私は、コードを停止して再起動する場合は、このエラーが発生した後、それだけで罰金レコードを示しています。だから私は、ストアドプロシージャが(それがコミットされている)レコードの削除を考えているEFのコンテキストを台無しにしています。

ストアドプロシージャの実行後にdbContext.SaveChanges()を呼び出します。ストアドプロシージャから削除ステートメントを実行した後、EF DbContextでクエリに問題が発生するのはなぜですか?

+0

sprocの行を削除したことをEFコンテキストがどのように知っていますか? – stuartd

+0

そうです、それは質問です。それを修正するような新しい文脈を得ることなく、どうすれば修正できますか?現在のDBコンテキストなどを「リフレッシュ」することはできますか? – user441521

+1

[エンティティフレームワークの更新コンテキスト?](http://stackoverflow.com/questions/20270599/entity-framework-refresh-context) – stuartd

答えて

0

残りのレコードを返すクエリが何も返さない場合(レコードが残っていない場合)、エラー状態としてそのシーケンスに要素がないため、Single()はその例外をスローします。 SingleOrDefault()を代わりに使用すると、確認できるnullオブジェクトが返されます。

また、返された残りのレコードの配列に複数の要素がある場合、このコードは例外をスローします。

使用しているコードを投稿した場合は、この回答を編集してより具体的になるようにします。

+0

私はSingleOrDefault()を使うことができますが、大きな疑問は、なぜテーブルが実際にどのように見えるかと同期が外れていることです。私がアプリケーションを停止して起動すると、このクエリはうまく動作します。データを変更したストアドプロシージャを呼び出し、dbコンテキストの同じインスタンスを照会する方法がありますか? – user441521

+0

'Single()'の前に実行しているコードは何ですか?また、再起動する前にEFが認識していないと思われるデータベースの結果はどうなりますか? –

+0

EFはストアドプロシージャを呼び出し、そのプロシージャは、EF DBコンテキストを使用してクエリを実行した後で2つのテーブルからレコードを削除します。 – user441521

関連する問題