Tôi đang sử dụng EF 4.0 và tôi muốn sử dụng mức cách ly serializable
, bởi vì trong giao dịch, tôi muốn chặn đăng ký khi được đọc.cách thay đổi mức cách ly?
Vâng, trong SQL Server Tôi cố gắng để thay đổi mức độ cô lập với lệnh này:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Và trong C# Tôi sử dụng mã này để cố gắng ngăn chặn việc đăng ký:
using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.Serializable }))
{
Entities myContext = new Entities();
string colors = "select * from Colors where IDColor = 2";
Colors myColor = myContext.Colors.SqlQuery(colors).FirstOrDefault<Colors>();
myColor.Color = "Red";
myContext.SaveChanges();
scope.Complete();
}
Nếu tôi thực thi từng dòng mã của tôi, nếu tôi nhận được SaveChanges
nhưng vẫn không thực thi, nếu tôi thực hiện truy vấn với các màu bảng với SQL Server Management Studio chẳng hạn, tôi có thể lấy bản ghi. Sau đó, nếu tôi thực hiện lưu thay đổi và tôi nhận được scope.Clompete()
, nếu tôi thử truy vấn với Management Studio, tôi sẽ không nhận được gì vì đăng ký bị chặn, vì vậy khi tôi hoàn thành mã C#, thanh ghi sẽ được giải phóng và Tôi nhận được kết quả trong Management Studio.
Vì vậy, câu hỏi của tôi là, cách sử dụng mức cô lập có thể tuần tự hóa trong C#? Tôi có làm điều gì sai?
P.S .: Tôi nhận thấy rằng nếu tôi sử dụng lệnh này:
DBCC useroptions;
tôi thấy rằng mức độ cô lập là serializable
, nhưng nếu tôi đóng Management Studio và kết nối lại và xem mức độ cô lập là mặc định readCommitted
.
Vì vậy, câu hỏi của tôi là cách đặt mức cách ly mặc định cho cơ sở dữ liệu của tôi.
Tôi không hiểu. Bạn đã sử dụng giao dịch có thể tuần tự một cách chính xác. Bạn có thể giải thích những gì bạn muốn một cách khác nhau không? – usr