Come chiudere SqlConnection automaticamente dopo SqlMapper GridReader in 3rd Library

dapper

Domanda

Ecco lo snippet di codice del mio helper, ma ha alcuni difetti.

  /// <summary>
  /// Execute a command that returns multiple result sets, and access each in turn
  /// </summary>
  public static  SqlMapper.GridReader QueryMultiple(string sql, dynamic param = null, string connectionName = null)
  {

      using (SqlConnection connection = GetOpenConnection(connectionName))

      { return connection.QueryMultiple(sql, param);}

  }

QueryMultiple viene chiamato e chiuso manualmente dal programma esterno. Poco dopo, SqlConnection dovrebbe essere chiuso automaticamente, come concludere il mio helper? Grazie in anticipo.

Risposta accettata

Stranamente, un'opzione potrebbe essere: non dargli una connessione aperta. Questo non è ancora stato implementato su nuget, ma se si tira la versione da github in realtà ora richiede molto più controllo sulla connessione, se necessario. Tutti i metodi principali ( Query[<T>] , QueryMultiple , Execute ) ora funzionano bene con connessioni chiuse, chiudendole di nuovo quando è possibile. Quindi se invece avessi:

return GetClosedConnection(connectionName).QueryMultiple(sql, param);

quindi si chiuderà automaticamente quando GridReader raggiunge la fine dei dati. Si noti che l'ho ristrutturata per garantire che non Dispose() la connessione quando si esce dal metodo.



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