Necesito agregar "CON NOLOCK" cuando uso ActiveRecord? Sé que hay una manera de hacerlo nHibernate, pero no pude resolver esto en ActiveRecord.ActiveRecord: ¿Cómo agrego NOLOCK?
Gracias por su ayuda. Saludos,
Necesito agregar "CON NOLOCK" cuando uso ActiveRecord? Sé que hay una manera de hacerlo nHibernate, pero no pude resolver esto en ActiveRecord.ActiveRecord: ¿Cómo agrego NOLOCK?
Gracias por su ayuda. Saludos,
Sé que esto es viejo, pero aquí está la respuesta:
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
Esto es hacky .. –
ya no funcionan :-( –
Simplemente usando :lock => 'WITH (NOLOCK)'
en consulta funciona con las versiones actuales de activerecord-sqlserver-adaptador (2.3.24 y 3.2 .10 en el momento de escribir esto).
Si desea que se agrega a todas las consultas de modelo en particular, sólo hay que poner
default_scope :lock => 'WITH (NOLOCK)'
en su modelo.
esta voluntad bloquear la fila. Gran error –
WITH (ROWLOCK, UPDLOCK) para ser percise –
Agregue esto a su modelo de activerecord
default_scope joins('WITH (NOLOCK)')
hacer NO hacer: Bloqueo => 'con (NOLOCK)' se bloqueará cada fila con "CON (ROWLOCK, UPDLOCK)"
¿Puede explicar por qué cree que bloqueará cada fila con bloqueos adicionales? Porque he utilizado este truco sin ningún problema en un gran proyecto heredado. Hasta donde yo lo veo, lock => 'with (NOLOCK)' simplemente agrega la cláusula WITH (NOLOCK) a la consulta, aquí está la especificación correspondiente del adaptador sqlserver - https://github.com/rails-sqlserver/activerecord-sqlserver -adapter/blob/e95d1f4a4a62932a37d0eefbb3ff4e8a26dfb03b/test/cases/pesimistic_locking_test_sqlserver.rb # L53. ¿Me falta algo? – spariev
no estoy seguro, todo lo que sé es cuando utilicé ese código Tuve que pasarme eso "CON (ROWLOCK, UPDLOCK)" –
Parece que actualmente (v1.3.7 y anteriores), cuando usa: lock => 'WITH (NOLOCK)', activerecord-jdbcmssql-adapter usará "WITH (ROWLOCK, UPDLOCK) ", mientras que activerecord-sqlserver-adapter hará lo correcto. joins ('WITH (NOLOCK)') a veces genera sql inválido en ambos cuando intentas usar asociaciones. – mjc
default_scope {
lock('WITH (NOLOCK)')
}
No revivir una publicación anterior. Pero hay una opción para bloquear por consulta en lugar de establecerlo en el modelo.
Por ejemplo:
Account.where("name = 'shugo'").lock(true).first
Control hacia fuera este enlace para más información. http://api.rubyonrails.org/classes/ActiveRecord/Locking/Pessimistic.html
¿Alguna vez descubrió esto? – Altonymous
Aquí está mi solución http://stackoverflow.com/questions/1302746/how-do-add-nolock-with-nhibernate/39518098#39518098 –