2009-06-09 9 views
10

私は自分のウェブホストを分析しました。今度はもう一度やり直しました。技術者が何を修正したかはまだ分かりません。 問題は、私はエラーを受け取り、今ある:エンティティのフレームワークデータハンドラが閉じられているときに「読み込み」を呼び出す

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をリストに変換しようとするとエラーが発生することがわかりました。私は前にエラーを受け取ったことはありませんでしたが、これは間違っているかもしれない何か手がかりを与えますか?

+0

直接SQLクエリを実行するとどうなりますか? (linq-to-sqlを使用していません) –

+0

データベースやWebホストでエラーが発生しているため、エンティティフレームワーク自体とは何の関係もありません。 – Dofs

+0

'IEnumerable'を' IList'に変更すると私の問題が解決しました sprocから複雑なオブジェクトを返しています – safhac

答えて

24

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

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

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

コードを投稿すると、おそらく問題を診断するのに役立ちます。

+6

これはなぜ受け入れられる答えですか? – Jeroen

+0

Lazy Loadingの問題を指摘し、コンテンツをメモリに読み込むためにEntity Frameworkを強制して、問題を解決しました。クエリのホスティングEFコンテキストが破棄される前に '.ToList()'を使ってクエリの結果をメモリに強制的に格納します。 – Zarepheth

2

このエラーはかなりありましたが、SQLデータベースの整合性エラーであることが判明しました。 SQL Management Studioのクエリを関連する行に関連するテーブルで実行することでこれを確認しましたが、データが戻ってきたにもかかわらず、問題についてアドバイスされたエラーメッセージもありました。他のデータベースに対して実行されているEntity Frameworkでも同様のことが起こると思います。

+0

ありがとう、データベースで問題が発生しました。イベント選択*が動作しませんでした...エラーメッセージ605、レベル21、状態3、行1 データベース30の論理ページ(1:640)をフェッチしようとして失敗しました。割り当て単位7946994385574035456に属していないため、72057594046709760には割り当てられません。 –

1

私のコンピュータが予期せずシャットダウンした後、このエラーが発生し始めました。このスレッドを読んだ後、James Ellis-Jonesの答えでは、.ToList()が呼び出されたときにSQLプロファイラを使用してSQLを実行させ、SQL Server Management StudioでSQLを実行しました。これは、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を参照してください。

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

関連する問題