Perché Dapper non richiede una connessione aperta?

.net dapper

Domanda

La documentazione di Dapper afferma che richiede una connessione aperta . Tuttavia nel corso di pluralità di Steve Michelotti non apre la connessione prima di eseguire SQL, e ho riscontrato che il mio test di connessione a SQL Server e MS Access lo conferma.

È buona pratica controllare manualmente le connessioni o va bene lasciare questo a Dapper? Ci sono situazioni in cui Dapper richiede assolutamente che venga fornita una connessione aperta?

Ecco un esempio del codice che sto eseguendo contro un database di Access. In nessun momento apro la connessione, tuttavia Dapper restituisce felicemente una collezione di oggetti del Fondo:

Private ReadOnly _conn As IDbConnection = New OleDbConnection(ConnectionStrings.GetAccessConnectionString(ConnectionStrings.AccessVersion.v2003,
                                                                                                              ConfigurationManager.AppSettings("MSAccessLocation"), ""))
Public Function GetAll() As List(Of Fund) Implements IFundRepository.GetAll
        Return _conn.Query(Of Fund)("SELECT * FROM Funds").ToList()
End Function

Risposta popolare

Ho deciso di postare questa risposta come risposta, perché i commenti hanno opzioni di formattazione e lunghezza massima limitate ... Secondo il suggerimento di TimSchmelter, "non creare la connessione come campo ma come variabile locale". Indipendentemente dal fatto che dapper disponga o meno la connessione, il codice dovrebbe eliminarlo non appena non è necessario.

In questo caso,

Public Function GetAll() As List(Of Fund) Implements IFundRepository.GetAll

    Using conn As IDbConnection = New DbConnection (_connectionString)

        Dim funds As List(Of Fund) = _conn.Query(Of Fund)("SELECT * FROM Funds").ToList()

        Return funds

    End Using

End Function


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow