tôi cần phải làm một cái gì đó như thế này trên một bối cảnh giao dịchTransactionScope, nơi bắt đầu giao dịch trên hồ sơ sql?
using(var context = new Ctx())
{
using (TransactionScope tran = new TransactionScope())
{
decimal debit = 10M;
int id = 1;
var data = context.Cashier
.Where(w => w.ID == id)
.Select(s => new{ s.Money })
.Single();
Cashier cashier = new Cashier(){ ID = id };
context.Cashier.Attach(cashier);
cashier.Money = data.Money - debit;
context.Entry(cashier).Property(p => p.Money).IsModified = true;
context.SaveChanges(SaveOptions.None);
tran.Complete();
}
}
Tôi đang chạy SQL Profiler nhưng không thể nhìn thấy bắt đầu tran, là khối mã có đúng không? Tui bỏ lỡ điều gì vậy?
Có thể bạn đã lọc ra? Bạn cũng có thể thử tạo ra ctx bên trong giao dịch, chỉ để xem tôi có thay đổi gì không. –
Tại sao bạn sử dụng phạm vi giao dịch cho khối mã này? 'SaveChanges' sử dụng giao dịch nội bộ nếu bạn không xác định nó, trừ khi bạn đang sử dụng nhiều tài nguyên giao dịch hoặc gọi' SaveChanges' nhiều lần bạn không cần nó. –
Ladislav, đó là để ngăn chặn dữ liệu sai, người khác có thể sửa đổi tiền thu ngân trên phương pháp khác, nếu nó không giao dịch, thông tin này sẽ sai – Alexandre