Đầu tiên:không bao giờ sử dụng var ts = new TransactionScope()
. Là một trong những lớp lót giết chết ứng dụng của bạn. Luôn sử dụng hàm tạo rõ ràng cho phép bạn chỉ định mức cô lập. Xem bằng cách sử dụng TransactionScope () Được coi là Có hại mới.
Bây giờ về câu hỏi của bạn:logic để không thúc đẩy hai kết nối trong cùng một phạm vi vào DTC chủ yếu dựa vào trình điều khiển / nhà cung cấp hợp tác để thông báo cho Hệ thống. các nhà quản lý tài nguyên liên quan cũng vậy. SqlClient post SQL Server 2008 là trình điều khiển có khả năng thực hiện logic này. Trình điều khiển Oracle mà bạn sử dụng không phải là (và tôi không biết về bất kỳ phiên bản nào, btw).
Cuối cùng thì thực sự thực sự rất cơ bản:nếu bạn không muốn có DTC, đừng tạo một DTC! Đảm bảo rằng bạn sử dụng chính xác một kết nối trong phạm vi. Rõ ràng là có thể tranh luận rằng bạn không cần hai kết nối. Nói cách khác, hãy loại bỏ hai kho riêng biệt trong mô hình dữ liệu của bạn. Chỉ sử dụng một kho lưu trữ cho Đơn đặt hàng, Khoảng không quảng cáo và những thứ khác không. Bạn đang tự bắn vào chân mình với chúng và bạn đang yêu cầu giải pháp chống bụi pixie.
Cập nhật:Trình điều khiển Oracle 12c r1:
"Liên kết giao dịch và kết nối:Các kết nối ODP.NET, theo mặc định, chỉ tách ra khỏi các giao dịch khi các đối tượng kết nối bị đóng hoặc các đối tượng giao dịch bị loại bỏ"