Scrivo una semplice app ASP.NET Core dove Controller inietta MyService (configurato come Scoped) che a sua volta inietta MyDbContext.
Nel metodo del mio controller ho 2 query di database e il mio output di debug si presenta così:
Executing action method...
Opening connection to database 'shell' on server 'tcp://127.0.0.1:5432'.
...
Closing connection to database 'shell' on server 'tcp://127.0.0.1:5432'.
Opening connection to database 'shell' on server 'tcp://127.0.0.1:5432'.
...
Closing connection to database 'shell' on server 'tcp://127.0.0.1:5432'.
Request finished in...
La domanda è: è corretto aprire una nuova connessione su ogni richiesta e anche di più - per aprire una nuova connessione per ogni comando sql? Impossibile stabilire una volta la connessione al database e riutilizzarlo. Non sarebbe molto meglio per le prestazioni?
PS: io uso PostgreSQL con il provider npgsql
Come qualcun altro ha menzionato. Il pool di connessioni è tuo amico.
L'apertura e la chiusura sono perfette.
Apri e chiudi sempre la connessione come già detto sopra SO . Il pooling delle connessioni si occupa dei problemi di rendimento.
Rende il tuo codice più facile da leggere e non dovrai mai preoccuparti, dov'è la connessione che devo aprire, è aperta? Non è chiuso da qualche altra parte?
Come stai chiedendo, presumo tu non lo voglia davvero. Questo è quello che generalmente faccio. Un piccolo metodo di wrapper che genererebbe comandi sql simili a questo.
static bool FireCommand(SqlCommand command)
{
command.Connection.Open();
command.ExecuteQuery();
command.Connection.Close();
}