Что вам нужно, так это optimistic concurrency
в вашем заявлении UPDATE
, чтобы не исключать определенные поля. Короче говоря, это означает, что при обновлении таблицы к оператору UPDATE
добавляется предложение WHERE
, которое гарантирует, что значения полей в строке на самом деле такие, какими они были при выполнении последнего SELECT
.
Итак, давайте предположим, что в вашем примере я выбрал некоторые данные, а значения для A
и B
были 1
и 2
соответственно. Теперь давайте предположим, что я хотел обновить B
(ниже приведен пример):
UPDATE TestClass SET B = '3' WHERE Id = 1;
Однако вместо того, чтобы запускать этот оператор (поскольку там нет параллелизма), давайте запустим этот:
UPDATE TestClass SET B = '3' WHERE Id = 1 AND A = '1' AND B = '2';
Это утверждение теперь гарантирует, что запись не была никем изменена.
Однако на данный момент не похоже, что SimpleRepository от Subsonic поддерживает какой-либо тип параллелизма, и поэтому это станет серьезным недостатком. Если вы ищете очень простую библиотеку репозитория, где вы можете использовать POCO, я бы порекомендовал Dapper. На самом деле Dapper используется Stackoverflow. Это чрезвычайно быстро и позволяет легко встроить параллелизм в операторы обновления, потому что вы просто отправляете параметризованные операторы SQL.
- Эта статья о Stackoverflow представляет собой общую статью о том, как использовать Dapper для всех операций CRUD.
- В этой статье Stackoverflow показано, как выполнять вставки и обновления с помощью Dapper.
ПРИМЕЧАНИЕ: с Dapper вы можете делать то, что хотите, потому что вы отправляете базовые операторы SQL, но я бы не рекомендовал не использовать параллелизм.
person
Mike Perrenoud
schedule
12.09.2012