Параллелизм приложений базы данных C # - PullRequest
3 голосов
/ 02 апреля 2009

Я написал многопользовательское приложение на языке c # с использованием SQL Server 2005 Express в качестве внутреннего.

У меня есть коллекция заказов. Чтобы использовать этот класс, необходимо создать его экземпляр и просто вызвать метод Load (CustomerCode), чтобы заполнить коллекцию указанными заказами клиентов.

Мой вопрос:

Как обеспечить параллелизм, чтобы только 1 пользователь мог запросить сбор заказов для определенного клиента? Когда пользователь завершает работу с объектом (когда объект имеет значение null), Мне нужно будет сделать его доступным снова.

1 Ответ

7 голосов
/ 02 апреля 2009

Вам необходимо реализовать шаблон Пессимистическая автономная блокировка .

По сути, у вас есть таблица, в которую вы помещаете записи, представляющие «блокировку» записей в других таблицах. Когда вы хотите отредактировать запись, вы сначала проверяете, есть ли блокировка в таблице блокировок, и соответственно реагируете в логике / интерфейсе вашего домена.

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

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

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