Entity Framework Aufruf von 'Read', wenn der Datenbereich geschlossen ist

entity-framework

Frage

Ich habe einen Fehler in meinem Webhost gehabt. Jetzt ist es endlich wieder soweit und ich muss noch wissen, was die Techniker repariert haben. Das Problem ist jetzt ich erhalte den Fehler:

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

Ich habe nichts geändert, könnte es also einige Berechtigungen geben? Ich kann mich weiterhin mit denselben Anmeldeinformationen bei meiner Datenbank anmelden, sodass es sich nicht um die Anmeldeinformationen handelt. Hat jemand eine Idee?

UPDATE: Ich habe herausgefunden, dass ich die Fehlermeldung bekomme, wenn ich versuche, die IQuery in eine Liste zu konvertieren. Ich habe den Fehler noch nie erhalten. Gibt dies einen Hinweis darauf, was falsch sein könnte?

Akzeptierte Antwort

Das Entity-Framework verwendet eine langsame Bewertung. Dies bedeutet, dass die Abfrage beim Erstellen der Datenbank nicht tatsächlich ausgeführt wird. Sie wird ausgeführt, wenn Sie die Daten tatsächlich benötigen. Daher muss der Datenkontext beim Verarbeiten der Abfrage noch geöffnet sein.

Das Konvertieren der Abfrage in eine IList erzwingt die Ausführung der Abfrage. Wenn der Datenkontext an dieser Stelle geschlossen ist, wird ein Fehler wie dieser angezeigt.

Ich kann nicht erklären, warum Sie das vorher nicht verstanden haben, wenn Sie keinen Code geändert haben.

Vielleicht posten Sie Ihren Code. Dies könnte bei der Diagnose des Problems hilfreich sein.


Beliebte Antwort

Ich habe diese Fehlermeldung erhalten, nachdem mein Computer unerwartet heruntergefahren war. Nach dem Lesen dieses Threads führte mich die Antwort von James Ellis-Jones zur Verwendung von SQL Profiler, um die SQL auszuführen, die ausgeführt wurde, als .ToList () aufgerufen wurde, und ich habe SQL in SQL Server Management Studio ausgeführt. Dies ist die Nachricht, die SQL Server zurückgegeben hat:

SQL Server hat einen logisch konsistenten E / A-Fehler festgestellt: falsche Prüfsumme (erwartet: 0xb6a6f70e; aktuell: 0xb6a74f0e). Es trat während des Lesens von Seite (1: 50284) in Datenbank-ID 5 am Offset 0x000000188d8000 in Datei 'D: \ Work \ DATABASES \ SQL2008R2 \ xxxxx.mdf' auf. Zusätzliche Meldungen im SQL Server-Fehlerprotokoll oder Systemereignisprotokoll können weitere Details enthalten. Dies ist eine schwerwiegende Fehlerbedingung, die die Datenbankintegrität gefährdet und muss sofort korrigiert werden. Führen Sie eine vollständige Datenbankkonsistenzprüfung durch (DBCC CHECKDB). Dieser Fehler kann durch viele Faktoren verursacht werden. Weitere Informationen finden Sie in der SQL Server-Onlinedokumentation.

In meinem Fall hat das unerwartete Herunterfahren die Datenbank in einen inkonsistenten Zustand versetzt. Ich konnte eine Datenbanksicherung erfolgreich wiederherstellen und der Fehler wurde behoben.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum