Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Ärgerliche SQL-Ausnahme, wahrscheinlich aufgrund von fehlerhaftem Code

Der Code in ListaServicosProcesso erstellt die Kontextdatenbank. Dann gibt es ein IQueryable zurück.

Zu diesem Zeitpunkt wurde noch keine Anfrage an die Datenbank gesendet.

Dann gibt es ein für jeden im Code. An diesem Punkt sagt EF "Ich muss die Daten aus der Datenbank abrufen". Also versucht es, die Daten zu bekommen.

Aber die Kontextdatenbank ist jetzt außerhalb des Geltungsbereichs, also stürzt sie in der ersten Zeile ab, die versucht, die Daten zu verwenden.

Es gibt zwei Möglichkeiten, dies zu umgehen:

  • eine Liste von ListaServicosProcesso zurückgeben, dies wird die Ausführung des Datenbankaufrufs erzwingen
  • verschieben Sie for each in ListaServicosProcesso

Bearbeiten

Pharabus ist richtig, db ist nicht außerhalb des Geltungsbereichs. Das Problem ist hier:

 db = new RENDBDataContext();

Eine neue Instanz des Kontexts wird erstellt, ohne dass die alte verworfen wird. Versuchen Sie Dispose of db am Ende von ListaServicosProcesso. Noch besser platzieren Sie db in einer using-Anweisung. Aber dann muss foreach innerhalb der using-Anweisung verschoben werden.