2009-06-01 9 views
6

Usando nhibernate, ¿cómo puedo configurar el nivel de transacción para que no sea leído?Usando nHibernate, ¿cómo puedo leer sin compromiso?

Con SQL, normalmente establezco el nivel de transacción al principio de mi procedimiento almacenado o uso en línea (NOLOCK).

+0

Lo que sea que estés haciendo, leer no confirmado es realmente pedir problemas. Nunca he visto una razón real para usar esto. Las aplicaciones que en realidad están desactivando el aislamiento de transacciones no están utilizando las transacciones correctamente. –

+1

Eso es un mito de dba. Es una elección de diseño y, como todas las opciones de diseño, debe basarse en el dominio en el que opera. Para proyectos web pequeños y medianos básicos y aplicaciones para clientes (que supongo es la abrumadora mayoría del trabajo popular), entonces es probablemente lo correcto. La decisión es de costo frente a riesgo, en entornos en tiempo real que ejecutan transacciones sin lectura sucia es casi la norma. Los enormes sitios de comercio electrónico (como ebay) también compartirán muchas decisiones de diseño con aplicaciones de RT, los niveles de transacción son tan altos que su riesgo de usarlos es demasiado alto. El costo de las reversiones lo paralizará. – Vman

+0

Martin Fowler lo comentó aquí: http://martinfowler.com/bliki/Transactionless.html – Vman

Respuesta

3

Puede utilizar nolock LSQ en línea con nhibernate mediante los siguientes pasos:

  1. Crear HBM de archivos con las siguientes

    <sql-query name="PersonList"> 
    return alias="person" class="Person"> 
    SELECT * FROM Person WITH(nolock) 
    <sql-query> 
    
  2. Uso AddXmlFile(hbm file path) durante la creación de la sesión nhibernate.

  3. Utilizando DBSession.GetNamedQuery("PersonList") obtenga la lista de personas.

0

Esto funcionó para mí (específicos de SQL Server)

IDbCommand NHCommand; 

    NHCommand= NHSession.Connection.CreateCommand(); 

    NHCommand.CommandText= "SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED"; 

    NHCommand.ExecuteNonQuery(); 

clase de hablar con el direclty de RDBMS.

Cuestiones relacionadas