Mi chiedevo se la mia implementazione di seguito è il modo più efficiente per smaltire SQLconnection in questo caso.È questo il modo giusto per smaltire SQLConnection
Conosco normalmente se sto utilizzando SqlConnection direttamente Posso semplicemente racchiudere la connessione all'interno di un blocco utilizzando per eliminarlo automaticamente, ma in questo caso volevo mantenere la connessione aperta e disponibile per Tutti i metodi in SQLRespository classe.
public class SqlRepository : IRepository
{
private readonly string connectionString;
private SqlConnection connection;
public SqlRepository(string connectionString)
{
this.connectionString = connectionString;
connection = new SqlConnection(connectionString);
connection.Open();
}
public void Method_A()
{
// uses the SqlConnection to fetch data
}
public void Method_B()
{
// uses the SqlConnection to fetch data
}
public void Dispose()
{
connection.Dispose();
}
}
Usage:
using (IRepository repository = new SqlRepository(connectionString))
{
var item = repository.items;
}
Aggiornamento IRepository fa implementare IDisposable
Anche se è quasi sì, ma in caso di un'eccezione dopo l'apertura di una connessione nell'utilizzo del blocco, se si eseguono più operazioni, alcune eccezioni di lancio non disporranno mai dell'oggetto di connessione. E non è una buona idea rendere gli oggetti di connessione un ambito globale, ma giocare con CommandBehavior Vedi qui: http://stackoverflow.com/questions/7903326/why-does-my-successfully-read-npgsql-data-disappear/7903616 # 7903616 – Zenwalker
Un altro suggerimento è, per favore, attenersi sempre alle linee guida e implementare il modello di smaltimento. E connection.Dispose() chiuderà la connessione per te, puoi controllare il suo IL e vedrai chiamare DBConnection.Close(). Quindi l'apertura di conn in Using() {} è sufficiente purché non vengano lanciate eccezioni. – Zenwalker
@zenwalker '... a condizione che non vengano emesse eccezioni. La mia comprensione dell'istruzione' using' è che viene tradotta dal compilatore in un 'try'/finalmente', quindi è sempre disponibile anche nel caso di un eccezione. –