Comment fermer SqlConnection automatiquement après SqlMapper GridReader dans la 3ème bibliothèque

dapper

Question

Voici l'extrait de code de mon propre assistant, mais il comporte des défauts.

  /// <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 est appelé et fermé manuellement par un programme externe. Peu de temps après, SqlConnection devrait être fermé automatiquement, comment envelopper mon assistant? Merci d'avance.

Réponse acceptée

Curieusement, une option pourrait être: ne pas lui donner une connexion ouverte. Cela n'est pas encore déployé sur nuget, mais si vous extrayez la version de github, cela prend maintenant beaucoup plus de contrôle sur la connexion. Toutes les méthodes principales ( Query[<T>] , QueryMultiple , Execute ) fonctionnent désormais QueryMultiple avec les connexions fermées, le refermant dès que possible. Donc, si à la place vous aviez:

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

Il se fermera alors automatiquement lorsque GridReader atteindra la fin des données. Notez que je l'ai restructuré pour garantir que nous ne Dispose() pas Dispose() la connexion lorsque vous quittez la méthode.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi