Общий ресурс и одновременные пользователи - лучшие практики в .NET? - PullRequest
1 голос
/ 17 августа 2011

Есть приложение, которое в основном предназначено для доступа к базе данных.На данный момент, он разрешает доступ только для одного пользователя, и мне нужно, чтобы он поддерживал несколько одновременных пользователей.Проблема в том, что нет способа явно разделить ресурсы между этими пользователями, все ресурсы должны быть общими: так, у 10 пользователей может быть открытый ресурс, а затем 1 может изменить этот ресурс.

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

Обновление : Под "ресурсами" я в основном имею в виду данные в базе данных.

Обновление : Точнее, все дело в том, что когда у вас есть зависимость master-details между двумя сущностями, один пользователь открывает ее для удаления некоторых деталей, а другие открывают ее для добавления и изменения чего-либо.Первый удаляет часть данных, которую второй собирался изменить.И тогда это происходит.

1 Ответ

1 голос
/ 17 августа 2011

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

UPDATE Product 
SET Version = 2 /* The incremented version */,        
Name = 'UpdatedName',
Description = 'UpdatedDescription'
WHERE  Id = 'SomeUniqueIdXXXX'
AND Version = 1 /* The initial version */

Первое обновление будет выполнено успешно, а последующие обновления в той же строке не будут выполнены, если они использовали устаревшую Версия .Ваше приложение должно уметь обрабатывать ошибки и действовать так, как вы хотите (например, отображать сообщение об ошибке и т. Д.).Если вы не хотите изменять все свои таблицы для включения столбца Версия , вы можете использовать следующую технику.По сути, вы помещаете все исходные значения как часть предложения , где :

UPDATE 
Product 
SET Name = 'UpdatedName'
WHERE Id = 'SomeUniqueIdXXXX'
AND Name = 'OriginalName'
AND Description = 'OriginalDescription'

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

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