Выполняет ли TransactionScope межпроцессную блокировку базы данных в запросах LinQ?

Я запустил несколько приложений на одной машине, также с сервером MSSQL на этой машине.

Приложения бывают разных типов, например WPF, WCF Service, MVC App и так далее. Все они обращаются к единственной базе данных, которая находится на сервере sql. Режим доступа — это простые вызовы класса LinQ-to-SQL.

В каждом контакте с базой данных я делаю некоторые запросы, некоторые проверки и некоторые записи в БД.

Мой вопрос: могу ли я быть уверен, что вызовы внутри этих областей транзакций не выполняются одновременно (безопасны для потоков и процессов) с помощью простого TransactionScope?


person AgentFire    schedule 11.07.2012    source источник
comment
да, конечно, используя транзакцию, это будет безопасно, а также зависит от установленного вами IsolationLevel.   -  person yo chauhan    schedule 11.07.2012


Ответы (1)


Использование области транзакции, очевидно, сделает конкретное соединение транзакционным. Использование областей транзакций само по себе не мешает двум разным процессам на машине делать одно и то же одновременно. Это гарантирует, что все выполненные действия либо фиксируются, либо откатываются. Представление данных, которое видит каждый процесс, зависит от уровня изоляции, который по умолчанию является сериализуемым, что может легко привести к взаимоблокировкам. Более практичным уровнем изоляции является зафиксированное чтение, желательно с изоляцией моментальных снимков, так как это еще больше сокращает взаимоблокировки и время ожидания.

Если вы хотите убедиться, что только один экземпляр приложения что-то делает, вы можете использовать мьютекс или использовать блокировку базы данных, которую все разные процессы будут пытаться получить и, при необходимости, ждать.

person Xhalent    schedule 11.07.2012
comment
Я хочу убедиться, что только одно приложение выполняет действие 1. проверьте, нет ли строк в таблице. 2. если это так, создайте его, чтобы ему было разрешено работать таким образом, чтобы была создана только 1 строка. - person AgentFire; 11.07.2012
comment
Это ограничение данных, и, вероятно, его лучше всего реализовать с помощью триггера вставки. - person Xhalent; 12.07.2012