Một thời gian sau, tôi đã viết một lớp ORM cho ứng dụng .net của mình nơi tất cả các hàng cơ sở dữ liệu được đại diện bởi một lớp con của DatabaseRecord
. Có một số phương pháp như Load()
, Save()
v.v. Trong lần triển khai ban đầu của tôi, tôi đã tạo kết nối tới DB trong hàm tạo của DatabaseRecord
ví dụ:Phần trên của việc tạo SqlConnection mới trong C#
connection = new SqlConnection(
ConfigurationManager.ConnectionStrings["ConnectionName"].ConnectionString
);
sau đó tôi gọi Open()
và Close()
vào đó SqlConnection vào đầu và kết thúc của các phương pháp của tôi mà truy cập vào cơ sở dữ liệu. Điều này dường như với tôi (như một người đã quen thuộc với lập trình nhưng mới với C# và .net) là cách hiệu quả nhất để làm việc - có một kết nối và mở/đóng nó khi cần thiết trong lớp.
Tôi vừa mới được làm một số đọc và mặc dù nó xuất hiện rằng mô hình này được khuyến cáo ở một số nơi:
using (var connection = new SqlConnection(...)) {
connection.Open();
// Stuff with the connection
connection.Close();
}
tôi có thể thấy lý do tại sao nó mong muốn - kết nối được tự động Dispose()
d ngay cả khi công cụ bạn làm ở giữa gây ra một ngoại lệ không bị bắt. Tôi đã chỉ tự hỏi những gì trên là để gọi new SqlConnection()
có khả năng nhiều lần như thế này.
Kết nối Pooling được bật vì vậy tôi tưởng tượng chi phí là tối thiểu và cách tiếp cận thứ hai nên là thực hành tốt nhất nhưng tôi chỉ muốn đảm bảo giả định của tôi là đúng.
Cảm ơn tất cả các câu trả lời nhanh chóng đáng kinh ngạc! – vitch