Граница транзакции в Linq для блокировки таблицы после выполнения запроса? - PullRequest
0 голосов
/ 14 июня 2011

У меня есть многопоточное приложение, которое использует LinqToSql.Одна из вещей, которые мне нужно сделать, - это получить несколько строк от имени потока, например:

dataContext.Connection.BeginTransaction()
var available = MyThings.Where(t => t.IsAvailable).Take(numberToTake);
// other validation stuff happens here, then:
foreach (var t in available) {
  t.IsAvailable = false;
  t.GrabbedBy = this;
  dataContext.SubmitChanges();
}
dataContext.Connection.CommitTransaction();

Проблема в том, что запрос в строке 2, похоже, не блокирует MyThingsтаблицу, потому что другие потоки могут захватывать те же строки, что и этот поток, что, очевидно, не очень хорошая вещь.Я не могу установить блокировку кода вокруг этого блока, потому что разные потоки могут работать в разных областях памяти, возможно, даже на разных компьютерах.Но мне нужно иметь возможность блокировать эти строки, используя границу транзакции на уровне базы данных, чтобы никто другой не мог их захватить, пока я выполняю свою проверку.

Есть ли какой-нибудь встроенный способ сделать это сLinqToSql, если не считать «фиктивного» обновления этих строк, чтобы закрепить их на границе транзакции?

1 Ответ

2 голосов
/ 14 июня 2011

Вам необходимо указать IsolationLevel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...