У меня есть метод SaveApp (), который деактивирует существующие записи и вставляет новую.
void SaveApp(int appID)
{
begin transaction;
update;
insert;
commit transaction;
}
Допустим, в таблице базы данных SalesApp у меня есть 2 записи с appID, равным 123;
Если я вызову этот метод SaveApp ()
в двух потоках одновременно, первая транзакция (давайте назовем ее T1 ) обновит существующие две записи, в то время как вторая транзакция (назовем это T2 ) ожидает.
после окончания T1 в этой таблице будет три записи. однако каким-то образом T2 не знает о вновь вставленной записи, запрос на обновление в T2 только обновляет две предыдущие записи и вставляет четвертую.
после вызова этих двух методов в базе данных у нас теперь будет 4 записи, 3-я и 4-я активны, что неверно.
Знаете ли вы, что какое-либо решение может решить эту проблему? Я попытался использовать сериализуемый уровень изоляции, который не работает.
Спасибо!