Блокировка таблицы вставки SQL для области действия WCF - PullRequest
0 голосов
/ 30 апреля 2010

У меня есть две службы, разговаривающие с двумя разными хранилищами данных (т. Е. SQL). Я использую транзакцию: например:

using(TransactionScope scope = new TransactionScope())
{
    service1.InsertUser(user);//Insert to SQL Service 1 table User
    service2.SavePayment(payment);//Save payment SQL Service 2 table payment
    scope.Complete();
}

Сервис1 блокирует таблицу (Пользователь) до завершения транзакции, делая последующие транзакции с этой таблицей последовательными. Есть ли способ преодолеть блокировку, поэтому во время выполнения приведенного выше кода можно иметь более одного одновременного вызова таблицы SQL service1?

Буду признателен за любой вклад.

Заранее спасибо.

Lihnid

1 Ответ

0 голосов
/ 19 мая 2010

Я полагаю, что у вас могут быть триггеры для вашего пользователя или таблицы платежей, которые обновляют другой.

Наиболее вероятный сценарий состоит в том, что ваш вызов сохранения, вероятно, делает некоторые выборы, которые вы не можете сделать в том же самом процессе, где вы вставляете. Это вызывает слишком много блокировки. Определите, нужно ли вставлять с отдельным вызовом в БД, используя новую транзакцию внутри и опцию подавления, удаляя выбор из транзакции. Я знаю, что ваш выбор будет иметь nolock, но он кажется игнорируется в SQL 2005 по сравнению с более старыми версиями. У меня была такая же проблема.

Сделайте все ваши звонки максимально простыми.

...