我需要在使用ActiveRecord時添加「WITH NOLOCK」?我知道有一種方法可以實現nHibernate,但無法在ActiveRecord中找到它。ActiveRecord:如何添加NOLOCK?
謝謝你的幫助。 問候,
我需要在使用ActiveRecord時添加「WITH NOLOCK」?我知道有一種方法可以實現nHibernate,但無法在ActiveRecord中找到它。ActiveRecord:如何添加NOLOCK?
謝謝你的幫助。 問候,
我知道這是舊的,但這裏是答案:
criteria.SetLockMode(NHibernate.LockMode.None);
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
這是哈克.. – 2012-10-11 19:07:17
不再工作:-( – 2016-03-17 20:43:05
查詢只需使用:lock => 'WITH (NOLOCK)'
工作用ActiveRecord-SQLSERVER適配器(2.3.24和3.2的最新版本.10在撰寫本文時)。
如果你希望它被添加到特定模型的所有查詢,只是把
default_scope :lock => 'WITH (NOLOCK)'
在模型中。
這將鎖定該行大失敗 – 2013-11-15 15:57:32
WITH(ROWLOCK,UPDLOCK)將被執行 – 2013-11-15 16:02:51
添加到您的ActiveRecord模型
default_scope joins('WITH (NOLOCK)')
做不做:鎖= '與(NOLOCK)' 將鎖定每一行與 「WITH(ROWLOCK,UPDLOCK)」
您是否可以詳細說明爲什麼您認爲它會鎖定每行額外的鎖?因爲我在這個大的傳統項目中沒有任何問題地使用了這個hack。就我所見,:lock =>'with(NOLOCK)'只是將WITH(NOLOCK)子句添加到查詢中,這裏是來自sqlserver適配器的相應規範 - https://github.com/rails-sqlserver/activerecord-sqlserver -adapter/blob/e95d1f4a4a62932a37d0eefbb3ff4e8a26dfb03b/test/cases/pessimistic_locking_test_sqlserver.rb#L53。我錯過了什麼嗎? – spariev 2013-11-19 16:07:01
不確定,我所知道的是當我使用該代碼時「WITH(ROWLOCK,UPDLOCK)」 – 2013-11-20 16:03:40
看來,目前(v1.3.7及更早版本),當您使用:lock =>'WITH(NOLOCK)'時,activerecord-jdbcmssql-adapter將使用「WITH (ROWLOCK,UPDLOCK)「,而activerecord-sqlserver-adapter會做正確的事情。連接('WITH(NOLOCK)')有時會在您嘗試和使用關聯時生成無效的sql。 – mjc 2014-06-16 15:43:50
default_scope {
lock('WITH (NOLOCK)')
}
>
不復活舊帖子。但是可以選擇鎖定每個查詢,而不是將其設置在模型中。
例如:
Account.where("name = 'shugo'").lock(true).first
看看這個鏈接獲取更多信息。 http://api.rubyonrails.org/classes/ActiveRecord/Locking/Pessimistic.html
你有沒有想過這個? – Altonymous 2012-01-11 22:19:05
這是我的解決方案 http://stackoverflow.com/questions/1302746/how-do-add-nolock-with-nhibernate/39518098#39518098 – 2016-09-15 18:37:00