linq to sql проблема параллелизма! - PullRequest
0 голосов
/ 26 января 2011

У меня есть служба Windows, которая удаляет строки таблицы. я не хочу, чтобы он удалял строки, если строки загружены (для выполнения некоторых операций) моей службой wcf. кажется, что я должен поставить какой-то механизм блокировки, но я не могу найти, как это сделать. любая помощь в этом отношении?

спасибо Джамал.

1 Ответ

0 голосов
/ 26 января 2011

Вы не должны удерживать долгосрочные блокировки базы данных. Используйте какую-либо технику маркировки, например, таблицу идентификаторов для каждой загруженной строки с внешним ключом обратно к исходной таблице. Это предотвратит удаление, пока служба WCF не удалит записи во вспомогательной таблице. Он также включит безопасное удаление, добавив WHERE NOT EXISTS (SELECT * FROM loaded_rows WHERE id = outer.id) к операторам DELETE.

Эта модель даже допускает несколько «загрузчиков», добавляя столбец «loader_id» во вспомогательную таблицу.

Основная проблема с предлагаемым подходом заключается в том, что служба WCF должна удалять строки, когда она завершена с ними. Если он пренебрегает этим из-за ошибки или сбоя, строки будут постоянно заблокированы (или, по крайней мере, до тех пор, пока администратор базы данных не пройдет мимо). Есть множество способов обойти это, в основном вращаясь вокруг какого-то механизма истечения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...