Memiliki koneksi terbuka dan meneruskannya di antara kelas umumnya merupakan ide yang buruk. Tentu, membuka koneksi adalah performa yang hebat, tapi itu sudah ditangani oleh pool koneksi dengan menggunakan kembali koneksi yang sudah terbuka. Sebuah komentar: selalu menunggu selama mungkin untuk menelepon connection.Open()
, terutama dalam kode multithreaded karena ini akan menetapkan koneksi ke metode Anda (yang berpotensi akan meningkatkan jumlah koneksi terbuka yang dibutuhkan ke database).
Untuk membuat kelas Anda generik mungkin, saya akan merekomendasikan memiliki kelas dasar mengekspos metode dengan IDbConnection, dan repositori Anda akan memiliki implementasi yang lebih umum.
internal abstract class Repository
{
private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["myconnectionstring"].ConnectionString;
protected IDbConnection GetConnection()
{
return new SqlConnection(ConnectionString);
}
}
public class MyRepository : Repository
{
public IEnumerable<object> Get()
{
using (var connection = GetConnection())
{
connection.Open();
...
}
}
}