Soll der Entity Framework-Kontext in der Anweisung using verwendet werden?

c# entity-framework

Frage

Das Entity Framework-Kontextobjekt implementiert eine Dispose () -Methode, die "die vom Objektkontext verwendeten Ressourcen freigibt". Was macht es wirklich? Könnte es eine schlechte Sache sein, es immer in eine using-Anweisung zu setzen? Ich habe gesehen, dass es sowohl mit als auch ohne using-Anweisung verwendet wird.

Ich werde speziell den EF-Kontext aus einer WCF-Servicemethode verwenden, den Kontext erstellen, Linq ausführen und die Antwort zurückgeben.

EDIT: Anscheinend bin ich nicht der einzige, der sich darüber wundert. Eine weitere Frage ist, was in der Dispose () -Methode wirklich passiert. Einige sagen, dass es Verbindungen schließt, und einige Artikel sagen nicht. Was ist das Problem?

Akzeptierte Antwort

Wenn Sie einen Kontext erstellen, müssen Sie ihn später entsorgen. Ob Sie die using Anweisung verwenden sollten, hängt von der Lebensdauer des Kontexts ab.

  1. Wenn Sie den Kontext in einer Methode erstellen und nur innerhalb dieser Methode verwenden, sollten Sie die using Anweisung verwenden, da Sie die Ausnahmebehandlung ohne zusätzlichen Code erhalten.

  2. Wenn Sie den Kontext über einen längeren Zeitraum verwenden, dh die Lebensdauer ist nicht an die Ausführungszeit einer Methode gebunden, können Sie die using Anweisung nicht verwenden using und Sie müssen Dispose() selbst aufrufen und Dispose() , dass Sie sie immer aufrufen.

Was macht Dispose() für einen Objektkontext?

Ich habe mir den Code nicht angesehen, aber zumindest erwarte ich, dass die Datenbankverbindung mit den darunter liegenden Sockets oder den Ressourcen, die der Transportmechanismus verwendet, geschlossen wird.


Beliebte Antwort

Per Progamming Entity Framework : "Sie können den ObjectContext entweder explizit entsorgen oder warten, bis der Garbage Collector den Job ausführt ."

Kurz gesagt, obwohl die using-Anweisung nicht erforderlich ist, empfiehlt es sich, zu wissen, dass Sie mit ObjectContext fertig sind, da die Ressource sofort freigegeben wird, anstatt auf die Garbage Collection zu warten.



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