2017-07-26 1 views
0

Ich benutze EFCore, um Daten zum Backend db, ich rufe SaveChanges für jede eine bestimmte Anzahl von neuen Objekten, die zum Dataset hinzugefügt, bemerkte ich aus dem EFCore-Debug-Protokoll, dass es wird die Verbindung schließen und ein neues ich SaveChanges rufen jedes Mal öffnen:EFCore ein einzelnes dbconnect für die Lebensdauer von dbcontext verwenden

Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection|DEBUG|Opening connection to database ... 
Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection|DEBUG|Beginning transaction with isolation level 'Unspecified'. 
Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection|DEBUG|Committing transaction 
Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection|DEBUG|Closing connection to database... 
.... the logs repeats forever 

ist es also ohnehin nur eine Verbindung für den gesamten Lebenszyklus eines DbContext zu benutzen?

+2

Frage: warum kümmern Sie sich um die Verbindungen? – DavidG

+0

Antwort: Leistung. – fluter

+0

Und was lässt Sie glauben, dass es schneller geht? – DavidG

Antwort

5

Es gibt keine wirkliche Notwendigkeit für Sie zu ändern, wie dies funktioniert, oder sich überhaupt darum kümmern. Standardmäßig werden SQL Server-Verbindungen einfach in einen Verbindungspool zurückgelegt, sodass sie in Wirklichkeit nicht geschlossen werden. Wenn Sie eine neue öffnen, greifen Sie einfach die nächste im Pool an.

Sie können den Pool steuern, wenn Sie wirklich, indem Werte in der Verbindungszeichenfolge wollen, während ich dagegen raten würde, wenn Sie wirklich wissen, was Sie tun, das sind die wichtigsten Eigenschaften, die verwendet werden (von MSDN):

Verbindungs ​​Lebensdauer: wenn eine Verbindung an den Pool zurückgegeben wird, wird ihre Erstellungszeit mit der aktuellen Zeit verglichen, und die Verbindung zerstört wird, wenn die Zeitspanne (in Sekunden), um den Wert, der durch Verbindungs ​​Lebensdauer angegebenen überschreiten. Dies ist in Clusterkonfigurationen hilfreich, um den Lastenausgleich zwischen einem aktiven Server und einem gerade online geschalteten Server zu erzwingen. Ein Wert von Null (0) führt dazu, dass gepoolte Verbindungen die maximale Zeitüberschreitung aufweisen.

Verbindung zurückgesetzt: Bestimmt, ob die Datenbankverbindung zurückgesetzt wird, wenn sie aus dem Pool entfernt wird. Bei Microsoft SQL Server Version 7.0 wird durch Festlegen von false vermieden, dass beim Abrufen einer Verbindung eine zusätzliche Serverumgehung durchgeführt wird. Sie müssen jedoch beachten, dass der Verbindungsstatus, z. B. der Datenbankkontext, nicht zurückgesetzt wird.

Eintragen: Wenn "true", wird die Verbindung im aktuellen Transaktionskontext des Erstellungs-Threads automatisch vom Pooler erfasst, wenn ein Transaktionskontext vorhanden ist.

Max. Poolgröße: Die maximale Anzahl der im Pool zulässigen Verbindungen.

Min. Poolgröße: Die Mindestanzahl der Verbindungen im Pool.

Pooling: Wenn "true", wird die Verbindung aus dem entsprechenden Pool erstellt oder bei Bedarf erstellt und dem entsprechenden Pool hinzugefügt.

Verwandte Themen