Đây là kiến trúc hiện tại của mã nguồn phạm vi giao dịch của tôi. Chèn thứ ba ném một ngoại lệ .NET (Không phải là một ngoại lệ SQL) và nó không quay trở lại hai câu lệnh chèn trước đó. Tôi đang làm gì sai?TransactionScope không quay trở lại giao dịch
CHỈNH SỬA: Tôi đã xóa lần thử/bắt từ insert2 và insert3. Tôi cũng đã loại bỏ tiện ích xử lý ngoại lệ từ insert1 try/catch và đặt "throw ex". Nó vẫn không khôi phục lại giao dịch.
CHỈNH SỬA 2: Tôi đã thêm thử/bắt lại phương thức Insert3 và chỉ cần đặt "ném" vào câu lệnh bắt. Nó vẫn không khôi phục lại giao dịch.
UPDATE: Dựa trên những phản hồi tôi nhận được, lớp "SqlHelper" đang sử dụng các đối tượng SqlConnection để thiết lập một kết nối đến cơ sở dữ liệu, sau đó tạo ra một đối tượng SqlCommand, thiết lập thuộc tính CommandType để "StoredProcedure" và gọi ExecuteNonQuery phương pháp của SqlCommand.
Tôi cũng không thêm giao dịch Binding = Explicit Unbind vào chuỗi kết nối hiện tại. Tôi sẽ thêm điều đó trong bài kiểm tra tiếp theo của mình.
public void InsertStuff()
{
try
{
using(TransactionScope ts = new TransactionScope())
{
//perform insert 1
using(SqlHelper sh = new SqlHelper())
{
SqlParameter[] sp = { /* create parameters for first insert */ };
sh.Insert("MyInsert1", sp);
}
//perform insert 2
this.Insert2();
//perform insert 3 - breaks here!!!!!
this.Insert3();
ts.Complete();
}
}
catch(Exception ex)
{
throw ex;
}
}
public void Insert2()
{
//perform insert 2
using(SqlHelper sh = new SqlHelper())
{
SqlParameter[] sp = { /* create parameters for second insert */ };
sh.Insert("MyInsert2", sp);
}
}
public void Insert3()
{
//perform insert 3
using(SqlHelper sh = new SqlHelper())
{
SqlParameter[] sp = { /*create parameters for third insert */ };
sh.Insert("MyInsert3", sp);
}
}
Tôi không muốn nghi ngờ về kỹ năng phát triển của bạn, v.v ... nhưng bạn kiểm tra xem giao dịch đã quay trở lại như thế nào? Có thể giao dịch đang hoạt động chính xác nhưng bạn đang hiểu sai kết quả. Có lẽ cái gì khác đang xảy ra và chúng tôi/bạn đang sủa cây sai? –
hy vọng điều này sẽ giúp: http://stackoverflow.com/questions/28191333/error-in-ambient-transaction-doesnt-rollback-the-transaction/28258935#28258935 –