2010-07-21 10 views
14

So che per le scritture multiparte, dovrei utilizzare le transazioni in nhibernate. Per quanto riguarda la lettura e la scrittura semplici (1 parte) ... Ho letto che è buona norma usare sempre le transazioni. È richiesto?Devo utilizzare sempre le transazioni in nhibernate (anche per letture e scritture semplici)?

Devo fare quanto segue per una semplice lettura ?? o posso semplicemente rilasciare la parte di trascrizione tutto insieme?

public PrinterJob RetrievePrinterJobById(Guid id) 
{ 
    using (ISession session = sessionFactory.OpenSession()) 
    { 
     using (ITransaction transaction = session.BeginTransaction()) 
     { 
      var printerJob2 = (PrinterJob) session.Get(typeof (PrinterJob), id); 
      transaction.Commit(); 

      return printerJob2; 
     } 
    } 
} 

o

public PrinterJob RetrievePrinterJobById(Guid id) 
{ 
    using (ISession session = sessionFactory.OpenSession()) 
    { 
     return (PrinterJob) session.Get(typeof (PrinterJob), id);    
    } 
} 

Che dire per semplici operazioni di scrittura?

public void AddPrintJob(PrinterJob printerJob) 
{ 
    using (ISession session = sessionFactory.OpenSession()) 
    { 
     using (ITransaction transaction = session.BeginTransaction()) 
     { 
      session.Save(printerJob); 
      transaction.Commit(); 
     } 
    } 
} 
+7

Grande risposta su SO: http://stackoverflow.com/questions/1657465/nhibernate-transactions-on-reads –

risposta

21

La migliore raccomandazione sarebbe quella di utilizzare sempre una transazione. La documentazione This link from the NHProf spiega meglio perché.

Quando noi non definiamo le nostre transazioni, cade di nuovo in modalità di transazione implicita, in cui ogni dichiarazione alla banca dati viene eseguito nella sua propria transazione, risultando in un grande costo delle prestazioni (tempo di base di dati a transazioni di creazione e demolizione) e consistenza ridotta.

Anche se stiamo solo la lettura dei dati, abbiamo dovrebbe utilizzare una transazione, perché che utilizzano transazioni assicura che otteniamo risultati coerenti dal database. NHibernate presuppone che tutti gli accessi a il database avvengano in una transazione e scoraggiano in modo significativo qualsiasi utilizzo della sessione senza una transazione .

(A proposito, se si sta facendo un lavoro serio su NHibernate, si consiglia di provare NHProf).

Problemi correlati