エンティティフレームワークデータリーダーが閉じられたときに 'Read'を呼び出す

entity-framework

質問

私は私のウェブホストに故障がありました。今やっとそれは再び上がっています、そして私は技術者が何を修正したかについてまだ知りません。問題は今私はエラーを受け取ることです:

Calling 'Read' when the data reader is closed is not a valid operation. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: Calling 'Read' when the data reader is closed is not a valid operation.

Source Error: 

 An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

    Stack Trace:   

[InvalidOperationException: Calling 'Read' when the data reader is closed is not a valid operation.]
   System.Data.Common.Internal.Materialization.Shaper`1.StoreRead() +93
   System.Data.Common.Internal.Materialization.SimpleEnumerator.MoveNext() +30
   System.Linq.Enumerable.Single(IEnumerable`1 source) +119
   System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__2(IEnumerable`1 sequence) +5
   System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle(IEnumerable`1 query, Expression queryRoot) +25
   System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute(Expression expression) +43
   System.Linq.Queryable.Count(IQueryable`1 source) +240
   BusinessLayer.Car.GetCarCount() in xxx
   UserControls_SiteInfo.Page_Load(Object sender, EventArgs e) +225
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +50
   System.Web.UI.Control.LoadRecursive() +141
   System.Web.UI.Control.LoadRecursive() +141
   System.Web.UI.Control.LoadRecursive() +141
   System.Web.UI.Control.LoadRecursive() +141
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627

私は何も変更していません、それでそれはいくつかの許可であるかもしれません?それでもログイン情報ではないので、私は同じ資格情報でデータベースにログオンすることができます。誰か考えがありますか?

アップデート:IQueryをリストに変換しようとするとエラーが発生することがわかりました。私は前にエラーを受け取ったことがありません、これはあなたに誰かが間違っているかもしれないものの手がかりを与えますか?

受け入れられた回答

エンティティフレームワークは遅延評価を使用します。つまり、クエリはデータベースを作成したときに実際にはデータベースに対して実行されず、実際にデータが必要なときに実行されます。したがって、クエリを処理するときにはデータコンテキストはまだ開いている必要があります。

クエリをIListに変換すると、クエリが強制的に実行されます。この時点でデータコンテキストが閉じていると、このようなエラーが発生します。

あなたが何もコードを変更していないならあなたがこれまでにこれを得なかった理由を説明することはできませんが、これは私が見ているものです。

おそらくあなたのコードを投稿してください。これは問題の診断に役立つかもしれません。


人気のある回答

コンピュータが突然シャットダウンした後、このエラーが発生し始めました。このスレッドを読んだ後、James Ellis-Jonesの回答により、SQLプロファイラーを使用して、.ToList()が呼び出されたときに実行されているSQLを取得することができました。これはSQL Serverが返したメッセージです。

SQL Serverは論理的整合性ベースのI / Oエラーを検出しました。チェックサムが正しくありません(予想される値:0xb6a6f70e、実際の値:0xb6a74f0e)。ファイル 'D:\ Work \ DATABASES \ SQL2008R2 \ xxxxx.mdf'のオフセット0x000000188d8000でデータベースID 5のページ(1:50284)の読み取り中に発生しました。 SQL Serverのエラーログまたはシステムイベントログに追加のメッセージが表示される場合があります。これはデータベースの整合性を脅かす重大なエラー状態であり、直ちに修正する必要があります。データベース全体の整合性チェックを完了する(DBCC CHECKDB)。このエラーは多くの要因によって引き起こされる可能性があります。詳細については、SQL Server Books Onlineを参照してください。

したがって、私の場合は、予期しないシャットダウンによってデータベースが矛盾した状態になりました。データベースのバックアップを正常に復元することができ、エラーは消えました。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ