Вопрос о блокировке области в 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();
}