Как устранить нарушения параллелизма с помощью DataTables в .NET? - PullRequest
2 голосов
/ 25 июня 2011

Я использую DataTables в VB.NET 2.0 и пишу код для обработки нарушений параллелизма, которые, как я ожидаю, произойдут в многопользовательской среде. Я понимаю, как отлавливать нарушения параллелизма, но не понимаю, как их устранить при использовании команд INSERT, UPDATE и DELETE, генерируемых DbCommandBuilder.

Мне кажется, что нарушения параллелизма происходят в пяти различных ситуациях:

Когда ...

  1. Обновление строки, которая была одновременно обновлена ​​в базе данных
  2. Обновление строки, которая была одновременно удалена из базы данных
  3. Удаление строки, которая была одновременно обновлена ​​в базе данных
  4. Удаление строки, которая была одновременно удалена из базы данных
  5. Вставка строки, первичный ключ которой был одновременно вставлен в базу данных

Я знаю, как разрешить ситуацию 1; Я нашел несколько примеров того, как использовать метод DataTable.Merge для синхронизации обновленных строк. Однако Merge, похоже, не работает для других 4 ситуаций.

В качестве примера предположим, что я пытаюсь обновить строку, которая была одновременно удалена из базы данных (ситуация 2), и мои бизнес-правила говорят мне восстановить строку в базе данных с обновленными значениями столбцов. Я не могу понять, как изменить свойства DataRow, чтобы метод Adapter.Update вставлял строку в базу данных по мере необходимости; Слияние не делает этого.

Учитывая легкость, с которой Merge обрабатывает ситуацию 1, я уверен, что должны быть и простые решения для других нарушений параллелизма, и я только что их пропустил. Кто-нибудь может дать мне толчок в правильном направлении?

-TC

1 Ответ

0 голосов
/ 25 июня 2011

Если строка, которую вы пытаетесь обновить, была удалена другим процессом, и вам необходимо восстановить ее, то вам нужно перехватить исключение параллелизма, которое возникает, когда вы пытаетесь обновить и ответить, вставив строку обратно в базу данных:

  1. Сохраните обновленные значения.
  2. Объедините нарушения параллелизма в вашу таблицу, чтобы удалить строку, которая была удалена в базе данных.
  3. Вставить новую строкув вашу таблицу с сохраненными значениями.
  4. Сохраните таблицу.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...