Zaman zaman ISession
ADO.NET bağlantısının durumunu bellekte tutulan nesnelerin durumu ile senkronize etmek için gereken SQL deyimlerini yürütür. Bu işlem, yıkama, varsayılan olarak aşağıdaki noktalarda gerçekleşir
- Bazı etkinleştirilmelerinde gelen
Find()
veyaEnumerable()
- itibaren
NHibernate.ITransaction.Commit()
- itibaren
ISession.Flush()
SQL ifadeleri aşağıdaki sırayla verilir
- tüm varlık eklemeleri, aynı sırayla karşılık gelen nesneler kullanılarak kaydedildi
ISession.Save()
- tüm varlık güncellemeleri
- tüm koleksiyon silme işlemleri
- tüm koleksiyon öğesi silme, güncelleme ve ekleme işlemleri
- tüm koleksiyon eklemeleri
- tüm varlık silmeleri, aynı sırayla karşılık gelen nesneler kullanılarak silindi
ISession.Delete()
(Bunun bir istisnası, yerel kimlik oluşturma kullanan nesnelerin kaydedildiklerinde eklenmesidir.)
Açıklık dışında Flush()
, Oturumun ADO.NET çağrılarını ne zaman yürüteceği konusunda kesinlikle hiçbir garanti yoktur, yalnızca yürütüldükleri sıra . Ancak, NHibernate ISession.Find(..)
yöntemlerin asla eski verileri döndürmeyeceğini garanti eder ; ne de yanlış verileri döndürmezler.
Yıkama işleminin daha az sıklıkta gerçekleşmesi için varsayılan davranışı değiştirmek mümkündür. FlushMode
Sadece zaman taahhüt de aynı hizada (ve NHibernate yalnızca: Sınıf üç farklı mod tanımlar ITransaction
, API kullanılır) floş otomatik rutin veya sürece asla gömme açıkladı kullanılarak Flush()
açıkça denir. Son mod, uzun süre ISession
açık kaldığı ve bağlantısının kesildiği uzun süre çalışan iş birimleri için kullanışlıdır .
...
Bir oturumu sonlandırmak dört farklı aşamadan oluşur:
- oturumu yıkamak
- işlemi yap
- oturumu kapat
- istisnaları ele al
Oturumu Yıkama
ITransaction
API kullanıyorsanız, bu adım için endişelenmenize gerek yoktur. İşlem tamamlandığında dolaylı olarak gerçekleştirilecektir. Aksi takdirde ISession.Flush()
, tüm değişikliklerin veritabanı ile senkronize edildiğinden emin olmak için aramalısınız .
Veritabanı işleminin gerçekleştirilmesi
NHibernate ITransaction API kullanıyorsanız, şuna benzer:
tx.Commit(); // flush the session and commit the transaction
ADO.NET işlemlerini kendiniz yönetiyorsanız, ADO.NET işlemini el ile yapmanız gerekir Commit()
.
sess.Flush();
currentTransaction.Commit();
Değişikliklerinizi yerine getirmemeye karar verirseniz:
tx.Rollback(); // rollback the transaction
veya:
currentTransaction.Rollback();
İşlemi geri alırsanız, NHibernate'in dahili durumunun tutarlı olduğundan emin olmak için geçerli oturumu hemen kapatıp atmalısınız.
Oturumun Kapatılması
Bir ISession.Close()
oturumun sonunu işaretlemek için yapılan bir çağrı . Close () 'un ana anlamı, ADO.NET bağlantısının oturum tarafından sonlandırılmasıdır.
tx.Commit();
sess.Close();
sess.Flush();
currentTransaction.Commit();
sess.Close();
Kendi bağlantınızı Close()
sağladıysanız, buna bir başvuru döndürür, böylece manuel olarak kapatabilir veya havuza geri gönderebilirsiniz. Aksi takdirde Close()
havuza geri döndürür.