2010-10-28 8 views
6

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,

+0

¿Alguna vez descubrió esto? – Altonymous

+0

Aquí está mi solución http://stackoverflow.com/questions/1302746/how-do-add-nolock-with-nhibernate/39518098#39518098 –

Respuesta

1

Sé que esto es viejo, pero aquí está la respuesta:

criteria.SetLockMode(NHibernate.LockMode.None); 
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 
+0

Esto es hacky .. –

+0

ya no funcionan :-( –

1

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.

+0

esta voluntad bloquear la fila. Gran error –

+0

WITH (ROWLOCK, UPDLOCK) para ser percise –

1

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)"

+0

¿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

+0

no estoy seguro, todo lo que sé es cuando utilicé ese código Tuve que pasarme eso "CON (ROWLOCK, UPDLOCK)" –

+1

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

0
default_scope { 
    lock('WITH (NOLOCK)') 
} 
Cuestiones relacionadas