NHibernate’de ISession.Flush
‘ı Anlamak: Ne Zaman ve Neden Kullanmalısınız
NHibernate ile çalışmak bazen bunaltıcı olabilir, özellikle ISession.Flush
gibi işlevlerle. Birçok geliştirici, bu işlevin faydasını ve etkin uygulamasını anlamakta zorluk yaşıyor. Bu rehberde, session.Flush
ın ne olduğunu, ne zaman kullanılması gerektiğini ve veritabanı işlemlerini neden önem taşıdığını açacağız.
Temel Zorluk: Oturum Yönetimini Navigasyon
Sıklıkla NHibernate’deki üç kritik işlem arasındaki ilişki hakkında karışıklık yaşanır: Flush
, Commit
ve Close
. Aşağıda kısa bir özet bulunmaktadır:
- Flush: Bellekte yapılan değişikliklerle veritabanını günceller.
- Commit: Bir işlemi tamamlar, tüm değişikliklerin onaylandığından veya bir hata durumunda geri alındığından emin olur.
- Close: Oturumu sonlandırır ve herhangi bir bağlantıyı serbest bırakır.
Flush
‘ı Commit
ile birlikte ne zaman kullanacağınızı anlamak, etkili veri yönetimi için esastır.
ISession.Flush
Ne Zaman Kullanılmalı
Flush
‘ı etkili bir şekilde ne zaman kullanacağınıza karar vermenize yardımcı olacak basit bir kılavuz:
- Her Zaman İşlemler Kullanın: Veritabanı işlemlerinizi bir işlem içinde başlatın. Bu, hata yönetimi için kolay bir geri alma mekanizması sağlar.
- Doğrudan
Close()
Kullanımından Kaçının: Bunun yerine,ISession
yaşam döngüsünü otomatik olarak yönetenusing
ifadelerini tercih edin. Bu, kaynak sızıntılarını önleyerek kodun okunabilirliğini artırır.
NHibernate Varsayılan Boşaltma Davranışı
NHibernate belgelerine göre, ISession
‘ın boşaltılması birkaç senaryoda otomatik olarak gerçekleşir:
Find()
veyaEnumerable()
yöntemlerinin belirli çağrılarında.NHibernate.ITransaction.Commit()
çağrıldığında; bu, işlemi bir harekette boşaltır ve onaylar.ISession.Flush()
çağrısıyla açıkça.
Boşaltma Uygulama Sırası
Bir boşaltma gerçekleştiğinde, NHibernate SQL ifadelerini şu sırayla yürütür:
- Tüm varlıklar için eklemeler (kaydedildikleri sırada).
- Tüm varlıklar için güncellemeler.
- Koleksiyonlar için silmeler.
- Koleksiyon elemanları için güncellemeler veya eklemeler.
- Son olarak, varlıkların silinmesi (silme çağrılarıyla ilgili sıraya göre).
Önemli Hususlar
- İçsel vs. Dışsal Boşaltma: Eğer açıkça
Flush()
çağrısı yapmazsanız, oturum yürütmesinin ne zaman gerçekleşeceği konusunda herhangi bir garanti yoktur, sadece sıra vardır. - Boşaltma Modları: Oturumlarınız için
FlushMode
‘u üç modda yapılandırabilirsiniz: yalnızca onay sırasında boşalt, otomatik olarak boşalt veya belirli çağrılar yapılmadıkça asla boşaltma. Bu, özellikle uzun süreli işlemler için faydalıdır.
Boşaltma, Onaylama ve Kapatma Aşamaları
Bir oturumu sonlandırmak, belgelerde vurgulanan bu farklı aşamaları içerir:
- Oturumu Boşaltma:
ITransaction
API’sini kullanmıyorsanız, değişikliklerin veritabanıyla senkronize olmasını sağlamak içinFlush()
çağrısı yapın. - İşlemi Onaylama:
ITransaction
API’sini kullanıyorsanız, bu otomatik olarak halledilir, aksi takdirde manuel olarak yapılması gerekir. - Oturumu Kapatma: Bağlantıları düzgün bir şekilde serbest bırakmak için oturumlarınızı her zaman kapatın.
Kod Parçası Örnekleri
NHibernate ile bu aşamaları nasıl yönetebileceğinize dair örnek:
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
// Burada veritabanı işlemleriniz
session.Flush(); // Değişikliklerin uygulandığından emin olun
transaction.Commit(); // İşlemi onaylayın
}
}
ADO.NET işlemleri doğrudan yönetiyorsanız:
session.Flush(); // Açıkça boşalt
currentTransaction.Commit(); // ADO.NET işlemini onayla
Sonuç: NHibernate Boşaltmasını Masterlama
ISession.Flush
karmaşık görünebilir, ancak işlem yönetimiyle olan ilişkisini anlamak çok önemlidir. Her zaman işlemleri kullanmak, oturum kapatmayı düzgün yapmak ve ne zaman boşaltma yapacağınızı bilmek gibi en iyi uygulamalara uymak, NHibernate deneyiminizi daha kolay ve verimli hale getirecektir.
Bu makaledeki rehberliği takip ederek, veritabanı işlemlerinizi etkili bir şekilde yönetmek için daha iyi bir şekilde donanımlı olacaksınız ve veri bütünlüğünüz ile oturum verimliliğinizin her zaman yüksek kalmasını sağlayacaksınız.