2016-10-18 4 views
2

Angenommen, ich habe einen lang andauernden Prozess (z. B. Windows-Dienst), der aus mehreren Threads auf eine Datenbank zugreifen muss.Lebensdauer von DbContext in einem lang laufenden Prozess

DbContext ist nicht Thread-sicher, es ist auch eine gute Idee, es für eine lange Zeit nicht zu behalten (scheint, dass eine best bewährte Vorgehensweise in der Web-Umgebung ist, einen neuen Kontext für jede Anfrage zu erstellen).

Basierend auf EF docs sind Contexts erwartet kurzlebig und verworfen zu sein, und als solche sind sehr leicht und Metadaten wiederzuverwenden implementiert zu sein, wann immer möglich, so scheint es, wie für jede Datenbank einen neuen DB Kontext zu schaffen Operation könnte unter diesen Umständen ein Weg sein, aber es scheint ein bisschen übertrieben.

Gedanken?

+0

können Sie Code anzeigen? – Sampath

+0

@Sampath Derzeit gibt es keine. Entscheiden Sie sich für einen besten Weg, um es zu schreiben. – Evgeni

+0

DbContext auf lange Sicht zu halten, ist keine gute Idee - Speicherlecks, Überlauf sind möglich, und Change Tracking kann Ihnen flippige Ergebnisse bringen. Erstellen und Entsorgen von DbContext, wie Sie benötigen, ist eine ziemlich gute Idee –

Antwort

0

Kurzfristig, aber nicht nur wegen DB Überlegungen, auch wegen der Anwendungsarchitektur: Wenn Ihre Architektur Clean Code ist (nach Bob Martin), würde ein Website oder Windows Service nichts über die Datenbank wissen würden sie bei Bedarf einfach einen Anwendungsdienst wie & erstellen. Der (die) Anwendungsdienst (e) sollten dafür verantwortlich sein, den Lebenszyklus der Datenbanksitzung und alle Bits, die sie daraus erhalten, zu kontrollieren. Funktioniert wirklich gut für mich.

+0

Warum sollte eine Anwendung mehr über die Datenbank wissen, wenn der Kontext länger dauert? Sie verschieben das Problem nur vom Kontextlebenszyklus zum Anwendungsdienstlebenszyklus. Ich glaube nicht, dass die Lebensdauer des Kontexts selbst Auswirkungen auf die Trennung von Bedenken hat. –

Verwandte Themen