2013-07-01 2 views
3

Я был удивлен, увидев документацию по этому вопросу, не знает ли кто-нибудь, поддерживает ли OrmLite Оптимистический параллелизм? Любая документация или примеры ссылок были бы наиболее желанными.Поддерживает ли ServiceStack.OrmLite Оптимистичный параллелизм

+0

Насколько я знаю, Ormlite обеспечивает обертку вокруг IDBConnection, очень тонкой обертки. И если вы используете «использование», он закроет соединение для вас. Ничего конкретно не делается для параллелизма. Транзакция также существует как часть IDBConnection. – kunjee

ответ

1

Это неправда OrmLite. Это зависит от уровня изоляции и настройки базы данных.

Пример:

using (var trans = Db.BeginTransaction(IsolationLevel.ReadCommitted) as SqlTransaction) 
      { 
       try 
       { 
        //do something 
        trans.Commit(); 
       } 
       catch (Exception ex) 
       { 
        trans.Rollback(); 
        throw ex; 
       } 
      } 
} 

От MS SQL Sever Docs

READ COMMITTED
Указывает, что заявления не может читать данные, которые были изменены, но не совершенные другими транзакциями. Это предотвращает загрязнение . Данные могут быть изменены другими транзакциями между отдельными отчетами в рамках текущей транзакции, что приводит к неповторяемым показаниям или фантомным данным. Этот параметр является стандартом SQL Server . Поведение READ COMMITTED зависит от настройки опции базы данных READ_COMMITTED_SNAPSHOT:

Если READ_COMMITTED_SNAPSHOT установлен в положение ON, то компонент Database Engine использует Row управления версиями, чтобы представить каждое утверждение с транзакционно последовательным снимок данных, как она существовала в начале заявления. Замки не используются для защиты данных от обновлений другими транзакциями.

В качестве альтернативы, вы можете использовать BeginTransaction(IsolationLevel.Snapshot) и имеют оптимистический параллелизм в том, что вы избежать блокировки, но SQL Server использует rowversion перед тем, чтобы избежать изменения данных, претерпевшие изменения за пределами текущей транзакции.

С другой MS SQL Server docs:

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

Смежные вопросы