2009-10-27 13 views
10

Jestem nowy w Nhibernate, więc moje zapytanie może wydawać się banalne.session.BeginTransaction() and transaction.Commit()

Zazwyczaj osadzić dane kod operacji wewnątrz

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

Bo generalnie beginTransaction/Commit/przywracania do zapisywania/aktualizacja/usuwanie danych,

Zastanawiam się, czy BeginTransaction() i Commit() są wymagane nawet jeśli jestem retriving danych przy użyciu session.Get<T>(id); lub session.CreateCriteria<T>().List();

proszę kierować.

Dziękujemy!

Odpowiedz

5

Nie, nie można pobierać danych bez transakcji; wszystkie operacje NH są skoncentrowane na transakcjach.

Przeczytaj ten artykuł pod numerem telefonu Ayende Rahien.

+0

Ale czy on nie mówi, że powinieneś używać transakcji dla każdej operacji w NH? Dlaczego mówisz "Nie"? –

+0

@HeavyWave: Miałem na myśli "Nie, nie możesz tego zrobić bez transakcji", zgadnij, że źle odczytałem linię. –

3

Powinieneś zawsze używać transakcji w zapytaniach. Nie tylko ze względu na wydajność, ale także ze względu na współbieżność, i mówi o tym Ayende.

Jego profiler trybu hibernacji wyświetla i ostrzega, jeśli używasz zapytań spoza zakresu transakcji.