ActiveRecord: как добавить NOLOCK? - PullRequest
       2

ActiveRecord: как добавить NOLOCK?

6 голосов
/ 29 октября 2010

Мне нужно добавить «С NOLOCK» при использовании ActiveRecord?Я знаю, что есть способ сделать это nHibernate, но я не смог понять это в ActiveRecord.

Спасибо за вашу помощь.С уважением,

Ответы [ 6 ]

2 голосов
/ 14 марта 2017

Не реанимировать старый пост. Но есть возможность заблокировать запрос, а не устанавливать его в модели.

Например:

Account.where("name = 'shugo'").lock(true).first

Проверьте эту ссылку для получения дополнительной информации. http://api.rubyonrails.org/classes/ActiveRecord/Locking/Pessimistic.html

1 голос
/ 15 ноября 2013

Добавьте это к вашей модели activerecord

default_scope joins('WITH (NOLOCK)')

Do NOT do: lock => 'with (NOLOCK)' будет блокировать каждую строку с помощью "WITH (ROWLOCK, UPDLOCK)"

1 голос
/ 20 мая 2013

Просто использование :lock => 'WITH (NOLOCK)' в запросе работает с текущими версиями activerecord-sqlserver-adapter (2.3.24 и 3.2.10 на момент написания).

Если вы хотите, чтобы он был добавлен во все запросы для конкретной модели, просто поставьте

default_scope :lock => 'WITH (NOLOCK)'

в вашей модели.

1 голос
/ 26 августа 2011

Я знаю, что это старо, но вот ответ:

criteria.SetLockMode(NHibernate.LockMode.None);
0 голосов
/ 10 июля 2014
default_scope {
    lock('WITH (NOLOCK)')
}
0 голосов
/ 26 июля 2012
module ActiveRecord
  module ConnectionAdapters
     class SQLServerAdapter  < AbstractAdapter

         alias :old_raw_select :raw_select

         def raw_select(sql, name = nil)
            sql.gsub! %r{FROM\s\[(\w+)\]\s}im, "FROM [\\1] with (nolock)"
            old_raw_select(sql,name)
         end
      end
   end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...