Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Exception SQL ennuyeuse, probablement due à un code mal fait

Le code dans ListaServicosProcesso crée la base de données de contexte. Ensuite, il renvoie un IQueryable.

À ce stade, aucune requête n'a été envoyée à la base de données.

Ensuite, il y a un pour chacun dans le code. À ce stade, EF dit "J'ai besoin d'obtenir les données de la base de données". Il essaie donc d'obtenir les données.

Mais la base de données de contexte est maintenant hors de portée, elle plante donc sur la première ligne qui essaie d'utiliser les données.

Il existe 2 façons de contourner ce problème :

  • renvoie une liste de ListaServicosProcesso, cela forcera l'appel de la base de données à s'exécuter
  • déplacer le pour chacun dans ListaServicosProcesso

Modifier

pharabus est correct db n'est pas hors de portée. Le problème est là :

 db = new RENDBDataContext();

Une nouvelle instance du contexte est créée sans que l'ancienne soit supprimée. Essayez Dispose of db à la fin de ListaServicosProcesso. Encore mieux, placez db dans une instruction using. Mais alors le foreach doit être déplacé à l'intérieur de l'instruction using.