Я использую EF 4.0, и я бы хотел использовать уровень изоляции serializable
, потому что в транзакции я хотел бы заблокировать регистр при чтении.Как изменить уровень изоляции?
Ну, в SQL Server Я пытаюсь изменить уровень изоляции с помощью этой команды:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
И в C# Я использую этот код, чтобы попытаться блокировать регистр:
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();
}
Если я выполнить строку за строкой мой код, если я получу SaveChanges
, но все равно не выполняется, если я делаю запрос к цветам таблицы с помощью SQL Server Management Studio, например, я могу получить запись.
Затем, если я выполняю изменения сохранения, и получаю scope.Clompete()
, если я пытаюсь выполнить запрос с помощью Management Studio, я ничего не получаю, потому что регистр заблокирован, поэтому, когда я заканчиваю свой код C#, регистр освобождается и Я получаю результат в Management Studio.
Итак, мой вопрос заключается в том, как использовать сериализуемый уровень изоляции в C#? Я делаю что-то неправильно?
P.S .: Я заметил, что если я использую эту команду:
DBCC useroptions;
Я вижу, что уровень изоляции serializable
, но если я закрываю Management Studio и подключитесь еще раз и посмотреть уровень изоляции по умолчанию readCommitted
.
Итак, мой вопрос заключается в том, как установить уровень изоляции по умолчанию для моей базы данных.
Я не понимаю. Вы уже используете сериализуемую транзакцию правильно. Можете ли вы объяснить, что вы хотите по-другому? – usr