2009-06-01 12 views
6

Utilizzando Nhibere, come posso impostare il livello di transazione per leggere senza impegno?Usando nHibernate, come posso leggere senza restrizioni?

Con SQL, di solito imposto il livello di transazione all'inizio della procedura memorizzata o utilizzo in linea (NOLOCK).

+0

Qualunque cosa tu stia facendo, leggere senza impegno è davvero un problema. Non ho mai visto una vera ragione per usare questo. Le applicazioni che disattivano effettivamente l'isolamento delle transazioni non utilizzano correttamente le transazioni. –

+1

Questo è un mito del dba. È una scelta di design e come tutte le scelte di progettazione dovrebbero essere basate sul dominio in cui operate. Per i progetti web di base e le applicazioni client di base (che credo sia la stragrande maggioranza delle attività popolari), probabilmente è la cosa giusta da fare. La decisione è costo vs rischio, in ambienti in tempo reale che eseguono transazioni senza operazioni di lettura sporche è praticamente la norma. Enormi siti di e-commerce (come ebay) condivideranno anche molte decisioni di progettazione con le app RT, i livelli di transazione sono così alti che è troppo rischioso utilizzarli. Il costo dei rollback ti paralizzerà. – Vman

+0

Martin Fowler ha commentato qui: http://martinfowler.com/bliki/Transactionless.html – Vman

risposta

3

È possibile utilizzare nolock SQLs in linea con NHibernate utilizzando seguenti operazioni:

  1. Creare HBM file con le seguenti

    <sql-query name="PersonList"> 
    return alias="person" class="Person"> 
    SELECT * FROM Person WITH(nolock) 
    <sql-query> 
    
  2. Usa AddXmlFile(hbm file path) durante la creazione della sessione NHibernate.

  3. Utilizzando DBSession.GetNamedQuery("PersonList") ottenere l'elenco delle persone.

0

questo ha lavorato per me (server SQL specifica)

IDbCommand NHCommand; 

    NHCommand= NHSession.Connection.CreateCommand(); 

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

    NHCommand.ExecuteNonQuery(); 

Tipo di parlare con il direclty RDBMS.

Problemi correlati