UpdateModel () приводит к тому, что строки не обновляются - PullRequest
0 голосов
/ 09 марта 2010

У меня проблема с использованием UpdateModel (theModelToUpdate), вызывающая проблемы с параллелизмом.

В основном происходит то, что в базе данных есть строка, которая содержит большинство, но не всю информацию, необходимую для этой строки.Остальная необходимая информация равна NULL.Пользователь (используя список) затем добавляет информацию в эту строку, а также создает новые строки (команда ajax отправляется для каждого элемента в списке. Таким образом, контроллер вызывается очень быстро из-за цикла, используемого для полученияitems).

В моем контроллере я сначала проверяю, являются ли столбцы, которые пользователь будет обновлять, пустыми.Если они есть, я использую UpdateModel для обновления строки.Если они не равны NULL (то есть строка завершена), тогда я создаю новые строки с оставшимися элементами списка.

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

Как мне решить эту проблему?

Ответы [ 2 ]

1 голос
/ 09 марта 2010

Не уверен, что я правильно понял: когда контроллер вызывается с использованием AJAX? Вы говорите, что это происходит очень быстро, поэтому я предполагаю, что вы вызываете контроллер несколько раз при отправке, а не каждый раз, когда пользователь фактически добавляет строку. Под «очень быстрым» я понимаю несколько операций в секунду.

Ну, на этот раз я думаю, что вы не должны использовать UpdateModel, если вы просто добавляете запись в строку - вы можете сделать это вручную.

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

Я бы посоветовал вам написать небольшое действие контроллера, которое добавляет только одну запись в интерактивном режиме, то есть каждый раз, когда пользователь действительно что-то делает. Это должно удерживать вас от проблем параллелизма.

0 голосов
/ 09 марта 2010

Я решил проблему, не используя UpdateModel для обновления строки. Вместо этого я вставляю строки, затем возвращаюсь и удаляю строку с отсутствующей информацией. Возможно, не лучшее решение, но оно решило мою проблему.

...