Как добиться выбора для обновления при использовании IQToolKit с MySQL - PullRequest
0 голосов
/ 20 марта 2012

Используя IQToolkit с MySQL, я хотел бы выполнить LOCKING READ внутри транзакции и в соответствии с документами mysql, способ сделать это - использовать «SELECT ... FOR UPDATE».Однако, похоже, что LINQ не поддерживает это по умолчанию, и я обнаружил, этот поток говорит о достижении аналогичной цели путем обработки ChangeConflictException .Каков наилучший способ сделать то же самое с помощью поставщика IQToolkit LINQ с MySQL?

1 Ответ

0 голосов
/ 20 апреля 2012

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

LINQ to SQL имеет особую поддержку оптимистичного параллелизма, что означает, что ожидаемое использование API заключается в том, что вы не читаете данные в транзакции, но когда вы отправляете изменения, все они входят в транзакцию (чтопроисходит под прикрытием от вашего имени.) Оптимистическая часть происходит, когда обновления отправляются.Если строки изменились с тех пор, как вы прочитали данные, обновления для этих строк завершатся неудачно.Это оставляет вам возможность либо прекратить все это, автоматически начать заново с новыми операциями чтения и т. Д., Либо использовать информацию в исключении конфликта изменений, чтобы выбрать, как объединить изменения с изменениями баз данных, а затем повторно отправить их.Подход «выбор и выбор» сложен, и если вы «не знаете, что делаете», вам, вероятно, следует просто использовать подход «повторить все с нуля».

IQToolkit не имеет возможности, позволяющей вамиспользуйте подход «выбрать и выбрать и повторно».Таким образом, лучше всего попытаться выполнить оптимистичный параллелизм - просто повторить попытку в случае сбоя обновления.Если вы предпочитаете использовать пессимистический параллелизм и простое помещение запросов на чтение в транзакцию не дает нужной вам блокировки, тогда вы можете свободно добавить эту возможность в IQToolkit, так как он является исходным набором и примерами для создания поставщиков запросов IQueryable.

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