使用ActiveRecord时我需要添加“WITH NOLOCK”吗?我知道有一种方法可以实现nHibernate,但无法在ActiveRecord中解决这个问题。
感谢您的帮助。 的问候,
答案 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)')
}