У меня есть SQL Server (2012), к которому я обращаюсь, используя Entity Framework (4.1). В базе данных у меня есть таблица с названием URL, в которой независимый процесс передает новые URL-адреса. Запись в таблице URL может быть в состоянии "Новый", "В процессе" или "Обработан".
Мне нужно получить доступ к таблице URL-адресов с разных компьютеров, проверить для записей URL со статусом "Новый", взять первый и пометить его как "В процессе".
var newUrl = dbEntity.URLs.FirstOrDefault(url => url.StatusID == (int) URLStatus.New);
if(newUrl != null)
{
newUrl.StatusID = (int) URLStatus.InProcess;
dbEntity.SaveChanges();
}
//Process the URL
Поскольку запрос и обновление не являются атомарными, я могу читать два разных компьютера и обновлять одну и ту же запись в базе данных.
Есть ли способ сделать атомарную последовательность select-then-update атомами, чтобы избежать таких столкновений?