2010-07-14 2 views
0

В настоящее время я пишу веб-службу WCF, которая использует LINQ to SQL для получения работы с базой данных SQL.Обработка параллелизма с помощью LINQ

У меня есть таблица Users, в которой было целое число, которое хранит количество запросов к сервису, который пользователь выполнил. Во время тестирования я получаю некоторые проблемы с параллелизмом, обновляя целое число, если оно выполняется одновременно.

Какой был бы лучший способ справиться с этим? Если LINQ обнаруживает конфликт, повторно извлекает счетчик использования и повторяет попытку, пока он не изменится?

Любые идеи помогут.

ответ

0

Не обновлять счетчик на клиенте (в процессе WCF), но вместо того, чтобы обновить его на сервере:

UPDATE Users 
SET Counter = Counter + 1 
WHERE UserId = @userID; 

Таким образом, вы не заботитесь о других вызовов одновременно максимально, потому что каждый вызов правильно увеличивает счетчик с 1. Проблема в том, что LINQ не может этого сделать, но в конечном итоге вам нужно использовать правильный инструмент для правильной работы (в данном случае это прямой SqlCommand).

1

Насколько велик счетчик запросов в реальном времени?

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

Надеюсь, это поможет.

+0

Спасибо за ответ. Я никогда не думал о решении, отличном от реального времени. Id предпочитает в режиме реального времени, но ваша идея - хорошая альтернатива. – Bram

+0

Рад, что я мог помочь. –

Смежные вопросы