Vì vậy, tôi đang cố gắng tìm ra các phương pháp hay nhất về kết nối cơ sở dữ liệu của mình. Tôi có một NET GUI lớn, đóng vai trò là giao diện người dùng cho db của MySQL. Hiện tại tôi mở một kết nối tải ứng dụng và sử dụng nó cho bất kỳ tương tác nào tôi cần. Tuy nhiên, toàn bộ GUI là đơn luồng.Đa luồng và kết nối cơ sở dữ liệu
Khi tôi bắt đầu thêm BackgroundWorkers cho các truy vấn lớn và thực hiện tôi lo lắng về kết nối mở của mình. Tôi biết, ví dụ, rằng tôi chỉ có thể có một dataReader tại một thời điểm mở trên kết nối đó. Với nhiều chủ đề, người dùng có thể cố gắng để nhanh chóng hơn thế.
Ưu điểm/nhược điểm của việc giữ một kết nối mở cho ứng dụng là gì khi mở một kết nối mới cho mọi tương tác?
Một số mẫu thiết kế phổ biến cho điều này là gì?
Thanks-
Jonathan
Khi bạn nói hỗ trợ giao dịch là không thể đối với kịch bản ConnectAndDisconnect, bạn có đang nói về giao dịch "toàn cầu" có hỗ trợ khôi phục mọi thứ kể từ khi ứng dụng được khởi chạy không? Nếu không, ngay cả với ConnectAndDisconnect, bạn có thể có hỗ trợ giao dịch. Bạn phải tổ chức mã của bạn để xác định giao dịch "cấp cao" và sau đó sử dụng ví dụ "TransactionScope" trong C# (http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx) – FrenchData
@FrenchData Tôi đang nói về giao dịch cấp trung gian, đến từ lớp logic nghiệp vụ. Chúng tôi đã thử cách tiếp cận TransactionScope nhưng nó vẫn chưa đủ, chúng tôi nhanh chóng gặp rắc rối, bởi vì mã lớp trung gian được sử dụng theo những cách khác nhau không lường trước được. Giải pháp bằng cách nào đó là một lai giữa hai cách tiếp cận, lớp ConnectionManager của chúng tôi hỗ trợ cả hai cách tiếp cận. Tất nhiên là không cần giao dịch từ khi bắt đầu ứng dụng, đó là lý do giải pháp lai tốt hơn. – AureliusMarcus