2009-10-27 5 views
10

Ich bin neu zu Nhibernate, so dass meine Abfrage für Sie trivial erscheinen mag.session.BeginTransaction() und transaction.Commit()

Wir betten im allgemeinen Datenoperationscode innerhalb

using (var session = sessionFactory.OpenSession()) 
    { 
    using (var transaction = session.BeginTransaction()) 
    { 
     ...Code for CRUD operations 
     transaction.Commit(); 
    } 
    } 

Weil wir in der Regel Begintrans/Commit/Rollback für das Speichern/Aktualisieren/Löschen von Daten,

Ich frage mich, ob BeginTransaction() und Commit() erforderlich sind, auch wenn ich bin retriving Daten mit session.Get<T>(id); oder session.CreateCriteria<T>().List();

Bitte führen.

Vielen Dank!

Antwort

5

Nein, Datenabruf ohne Transaktion ist nicht möglich; Alle NH-Geschäfte sind transaktionsorientiert.

Lesen Sie diesen Artikel von Ayende Rahien.

+0

Aber sagt er nicht, dass Sie Transaktionen für jede Operation in NH verwenden sollten? Warum sagst du "Nein"? –

+0

@HeavyWave: Ich meinte "Nein, das geht nicht ohne Transaktion", schätze ich lese die Zeile falsch. –

3

Sie sollten immer Transaktionen in Abfragen verwenden. Nicht nur für die Leistung, sondern auch für Nebenläufigkeit Gründe, und Ayende sagt darüber.

Sein Hibernate-Profiler zeigt und warnt, wenn Sie Abfragen verwenden, die nicht im Transaktionsbereich sind.

Verwandte Themen