Structure d'entité Appelant 'Lire' lorsque le datareader est fermé

entity-framework

Question

J'ai eu une panne sur mon hébergeur. Maintenant enfin, il est à nouveau en place, et je n'ai pas encore su ce que les techniciens ont réglé. Le problème est maintenant que je reçois l'erreur:

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

Je n'ai rien changé, alors pourrait-il y avoir des autorisations? Je peux toujours me connecter à ma base de données avec les mêmes informations d'identification. Ce ne sont donc pas les informations de connexion. Quelqu'un a une idée?

UPDATE: J'ai découvert que je reçois l'erreur lorsque j'essaie de convertir IQuery en liste. Je n'avais jamais reçu l'erreur auparavant, cela donne-t-il un indice à ce qui pourrait mal se passer?

Réponse acceptée

Le cadre de l'entité utilise l'évaluation paresseuse. Cela signifie que la requête n'est pas réellement exécutée sur la base de données lorsque vous la créez, elle est exécutée lorsque vous avez réellement besoin des données. Par conséquent, le contexte de données doit toujours être ouvert lorsque vous traitez la requête.

La conversion de la requête en IList forcera l'exécution de la requête. Si le contexte de données est fermé à ce stade, vous obtiendrez une erreur comme celle-ci.

Je ne peux pas expliquer pourquoi vous n'avez pas reçu cela auparavant si vous n'avez pas changé de code, mais c'est ce que je regarderais.

Peut-être poster votre code, cela pourrait aider à diagnostiquer le problème.


Réponse populaire

J'ai commencé à avoir cette erreur après la fermeture inattendue de mon ordinateur. Après avoir lu ce fil de discussion, la réponse de James Ellis-Jones m'a amenée à utiliser le profileur SQL pour exécuter le code SQL lors de l'appel de .ToList () et exécuter le code SQL dans SQL Server Management Studio. C'est le message que SQL Server a renvoyé:

SQL Server a détecté une erreur d'E / S basée sur la cohérence logique: somme de contrôle incorrecte (attendue: 0xb6a6f70e; réelle: 0xb6a74f0e). Cela s'est produit lors d'une lecture de la page (1: 50284) de la base de données ID 5 à l'offset 0x000000188d8000 du fichier 'D: \ Work \ DATABASES \ SQL2008R2 \ xxxxx.mdf'. Des messages supplémentaires dans le journal des erreurs SQL Server ou le journal des événements système peuvent fournir plus de détails. Il s'agit d'une condition d'erreur grave qui menace l'intégrité de la base de données et doit être corrigée immédiatement. Effectuez une vérification complète de la cohérence de la base de données (DBCC CHECKDB). Cette erreur peut être causée par plusieurs facteurs. pour plus d'informations, consultez la documentation en ligne de SQL Server.

Donc, dans mon cas, l’arrêt inattendu a laissé la base de données dans un état incohérent. J'ai réussi à restaurer une sauvegarde de base de données et l'erreur a disparu.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow