ActiveRecord:如何添加NOLOCK?

时间:2010-10-28 21:35:20

标签: activerecord

使用ActiveRecord时我需要添加“WITH NOLOCK”吗?我知道有一种方法可以实现nHibernate,但无法在ActiveRecord中解决这个问题。

感谢您的帮助。 的问候,

6 个答案:

答案 0 :(得分:2)

不要复活旧帖子。但是可以选择锁定每个查询,而不是在模型中设置它。

例如:

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

查看此链接以获取更多信息。 http://api.rubyonrails.org/classes/ActiveRecord/Locking/Pessimistic.html

答案 1 :(得分:1)

我知道这已经过时了,但答案是:

criteria.SetLockMode(NHibernate.LockMode.None);

答案 2 :(得分:1)

在查询中使用:lock => 'WITH (NOLOCK)'只能使用当前版本的activerecord-sqlserver-adapter(撰写本文时为2.3.24和3.2.10)。

如果您希望将其添加到特定型号的所有查询中,只需输入

即可
default_scope :lock => 'WITH (NOLOCK)'

在您的模型中。

答案 3 :(得分:1)

将此添加到您的activerecord模型

default_scope joins('WITH (NOLOCK)')

执行:lock => 'with(NOLOCK)'它将用“WITH(ROWLOCK,UPDLOCK)”锁定每一行

答案 4 :(得分:0)

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

答案 5 :(得分:0)

default_scope {
    lock('WITH (NOLOCK)')
}