Технически вам нужна длинная транзакция с более высоким уровнем изоляции, чем Read Committed (уровень по умолчанию). Мне не хватает информации, чтобы знать, хотите ли вы RepeatableRead или Serialzable (чтобы избежать фантомных вставок).
Вы можете выполнить то, что вы просите, выполнив что-то вроде этого:
var opt = new TransactionOptions();
opt.IsolationLevel = IsolationLevel.Serializable;
using (var scope = new TransactionScope(TransactionScopeOption.Required, opt) ){
//read table code
//write table code
//save context & complete scope
}
С учетом сказанного, Я очень сомневаюсь, что это то, что вы на самом деле хотите . Сериализуемые транзакции могут блокировать большую часть вашей базы данных. Что это значит? Вот как Microsoft описывает сериализуемую транзакцию:
SERIALIZABLE указывает следующее:
- Операторы не могут читать данные, которые были изменены, но еще не зафиксированы другими транзакциями.
- Никакие другие транзакции не могут изменять данные, прочитанные текущей транзакцией, до тех пор, пока текущая транзакция не завершится.
- Другие транзакции не могут вставлять новые строки со значениями ключей, которые попадают в диапазон ключей, считываемых любыми инструкциями в текущей транзакции, пока текущая транзакция не завершится.
Блокировки диапазона помещаются в диапазон значений ключа, которые соответствуют условиям поиска каждого оператора, выполняемого в транзакции. Это блокирует другие транзакции от обновления или вставки любых строк, которые соответствуют требованиям любого из операторов, выполняемых текущим
сделка.
....
Поскольку параллелизм ниже, используйте эту опцию только при необходимости .
Как указывает @Bertie, структура сущностей построена на основе оптимистичной модели параллелизма. Существует множество причин для использования оптимистичного параллелизма (OC) и множества шаблонов для решения неизбежных коллизий. ОК делает тебя выше и веселее. Использование сериализованных транзакций для всего оставит вас, как Брюса Уиллиса, в 12 обезьянах - наполненных кусочками торазина в слюнявых слюнявцах по всему полу вашей мягкой комнаты. Вы не хотите этого, теперь вы?