Có một kết nối mở và chuyển nó giữa các lớp nói chung là một ý tưởng tồi. Chắc chắn, việc mở một kết nối khá là hiệu quả, nhưng điều đó đã được nhóm kết nối quan tâm bằng cách sử dụng lại các kết nối đã mở. Mặc dù vậy, có một lưu ý: luôn chờ càng lâu càng tốt để gọi connection.Open()
, đặc biệt là trong mã đa luồng vì điều này sẽ chỉ định kết nối cho phương thức của bạn (sẽ tăng thêm số lượng kết nối mở cần thiết cho cơ sở dữ liệu).
Để làm cho các lớp của bạn chung chung nhất có thể, tôi khuyên bạn nên có một lớp cơ sở trưng ra một phương thức với IDbConnection và các kho lưu trữ của bạn sẽ có một triển khai chung hơn.
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();
...
}
}
}