Сначала я хотел бы описать механизм блокирующего решения, которое я хотел бы реализовать. В принципе, элемент можно открыть в режиме чтения или записи. Однако, если пользователь открывает элемент в режиме записи, ни один другой пользователь не сможет открыть его в режиме редактирования. Элемент означает случай в приложении обслуживания клиентов.Пессимистичная блокировка с использованием структуры Entity
Для этого я пришел к следующему: таблица будет содержать флаг, который указывает, будет ли элемент проверен для редактирования, и «время окончания», в то время как этот флаг действителен. Значение по умолчанию для него равно 3 минутам, если в это время не происходит взаимодействия с пользователем, флаг может быть проигнорирован в следующий раз, когда пользователь попытается открыть тот же элемент.
На стороне пользовательского интерфейса я использую jQuery для отслеживания активности пользователя. Если он или она, периодический вызов AJAX продлевает его или ее временные рамки, чтобы он или она мог продолжить работу над предметом. Когда пользователь сохранит элемент, флаг будет удален. Конечное время необходимо для обработки ситуаций, когда браузер выходит из строя или когда пользователь выпивает кофе и оставляет предмет открытым в течение часа.
Итак, вопрос. :) Если пользователь открывает элемент в режиме редактирования, сначала я должен прочитать значения времени & для элемента времени, и если я нахожу их действительными (флаг не установлен или не установлен, но не действителен из-за времени), и я должны обновить их новыми значениями. Какой уровень транзакций я должен использовать для этого в EF, если таковой имеется? Или я должен писать хранимые процедуры для обработки обновления & в транзакции? Если да, какой метод блокировки я должен использовать?
Временная метка была бы в порядке, если бы я использовал оптимистичную блокировку, насколько я знаю. В этом случае я мог бы использовать встроенные функции EF для обработки параллельных обновлений. Однако я хотел бы предотвратить ситуацию, когда два человека начнут работать над одним и тем же случаем. (потому что в этом случае они оба найдут решение, начнут писать ответ (из приложения), а после работы, которую они получат boo, кто-то уже решил это.) Что касается имени управления параллелизмом, я цитировал это из EF4 в книге действий. :) (решение на полпути: пессимистический/оптимистический контроль параллелизма) – norbip
Вы описываете пессимистическую блокировку, на самом деле нет дебатов. Вы не должны реализовывать блокировку самостоятельно, пусть это делает СУБД. – RickAndMSFT