/ / Sollte der DbContext in EF eine kurze Lebensdauer haben? - c #, Entity-Framework

Sollte der DbContext in EF eine kurze Lebensdauer haben? - c #, Entitäts-Framework

Ich habe einige lange laufende Aufgaben auf meinem Server. Im Grunde sind sie wie geplante Aufgaben - sie werden von Zeit zu Zeit ausgeführt.

Sie alle benötigten Zugriff auf die Datenbank, und ich verwende dafür Entity Framework. Jede Aufgabe verwendet einen DbContext für den Zugriff.

Soll das DbContext-Objekt bei jedem Lauf neu erstellt werden oder sollte ich es erneut verwenden?

Antworten:

3 für die Antwort № 1

Ich sollte sagen "es kommt darauf an" wie es wahrscheinlich istSzenarien, in denen beide Antworten gültig sind, die vernünftigste Antwort ist jedoch: "Der Kontext sollte beseitigt werden, sobald er nicht benötigt wird", was in der Praxis bedeutet, "eher früher als später zu entsorgen".

Das Risiko, das von einer solchen Antwort ausgeht, ist dasNeulinge kommen manchmal zu dem Schluss, dass der Kontext so weit wie möglich beseitigt werden sollte, was manchmal zu einem Code führt, den ich überprüfe, wenn aufeinanderfolgende "Verwendungen" einen Kontext erstellen, ihn für eine oder zwei Operationen verwenden, entsorgen und dann einen anderen Kontext als nächste Zeile auftauchen . Dies ist natürlich auch nicht zu empfehlen.

Im Falle von Web-Apps ist der natürliche Lebenszyklusverbunden mit einem Lebenszyklus von Webanfragen. Im Falle von Systemdiensten / anderen lang laufenden Anwendungen ist eine der Lebenszyklusstrategien "pro Geschäftsprozessinstanz" / "pro Anwendungsfallinstanz", bei der die Implementierung von Geschäftsabläufen / Anwendungsfällen natürliche Grenzen definiert, an denen separate Instanzen von Kontexten sinnvoll sind.


1 für die Antwort № 2

Ja, DbContext sollte nur für eine sehr kurze Zeit leben. Es ist effektiv Ihre Arbeitseinheit

Sie sollten es definitiv jedes Mal erstellen, wenn Sie es verwenden werden.


Update: OK, ich akzeptiere, dass "Erstellen Sie es jedes Mal, wenn Sie es verwenden werden" irreführend sein kann. Ich bin so daran gewöhnt, eine Instanz einer Klasse zu sein, die injiziert wird, und lebt nur für die Dauer einer Anfrage, die ich Mühe, es anders zu denken ... Die Antwort von @wiktor ist definitiv besser, da sie die Vorstellung, dass Sie "eher früher als später" entsorgen sollten, korrekter ausdrückt.