Вопрос о блокировке области действия в SQL Server (точнее, SQL Azure).
Сценарий
Группа записей выбирается с помощью операторов выбора.
Мы перебираем записи
Каждая запись обновляется в области транзакций -
(каждая запись не зависит от другой, и нет необходимости в блокировке таблицы)
Прав ли я, предполагая, что приведенное выше приведет к блокировке уровня строки только этой конкретной строки записи?
Постановка вопроса в контексте конкретного примера.
В приведенном ниже примере каждый элемент в itemsToMove будет заблокирован по одному?
var itemsToMove = ObjectContext.Where(emp => emp.ExpirationDate < DateTime.Now)
foreach(Item expiredItem in itemsToMove)
{
bool tSuccess = false;
using (TransactionScope transaction = new TransactionScope())
{
try
{
//We push this to another table. In this case Azure Storage.
bool bSuccess = PushToBackup();
if(bSuccess)
{
ObjectContext.DeleteObject(expiredItem);
}
else
{
//throw an exception or return
return false;
}
ObjectContext.SaveChanges();
transaction.Complete();
tSuccess = true;
}
catch (Exception e)
{
return cResults;
}
}
}
if (tSuccess)
{
ObjectContext.AcceptAllChanges();
}