2010-07-21 8 views
14

Ich weiß, dass für mehrteilige Schreibvorgänge ich Transaktionen in Nhibernate verwenden sollte. Wie auch immer, für einfaches Lesen und Schreiben (1 Teil) ... Ich habe gelesen, dass es gut ist, immer Transaktionen zu verwenden. Ist das erforderlich?Sollte ich immer Transaktionen in Nhibernate (auch für einfache Lese-und Schreibvorgänge) verwenden?

Sollte ich folgendes für eine einfache Lese tun? oder kann ich den transcaction part einfach zusammenlegen?

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; 
     } 
    } 
} 

oder

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

Was für einfache schreibt?

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

Große Antwort auf SO: http://StackOverflow.com/Questions/1657465/Nhibernate-Transactions-on-Reads –

Antwort

21

Beste Empfehlung wäre, immer eine Transaktion zu verwenden. This link from the NHProf Dokumentation, am besten erklärt warum.

Wenn wir unsere eigenen Transaktionen nicht definieren, fällt es wieder in impliziten Transaktionsmodus, in dem jeder Anweisung an die Datenbank eigene Transaktion in seiner läuft, was zu einer großen Leistungskosten (Datenbankzeit zu bauen und abreißen Transaktionen), und reduzierte Konsistenz. Auch

wenn wir nur Daten lesen, wir sollen eine Transaktion verwenden, da mit Transaktionen gewährleistet, dass wir konsistente Ergebnisse aus der Datenbank erhalten. NHibernate geht davon aus, dass der gesamte Zugriff auf die Datenbank unter einer -Transaktion erfolgt, und rät davon ab, die Verwendung der Sitzung ohne eine -Transaktion zu verwenden .

(BTW, wenn Sie ernsthafte NHibernate arbeiten, ziehen Sie in Betracht, NHProf auszuprobieren).

Verwandte Themen