1. Ana Sayfa
  2. ASP.Net
  3. NHibernate Nedir?

NHibernate Nedir?

Bu makalemizde sizlere NHibernate kullandığımız da dikkat etmemiz ve kesinlikle bilmemiz gereken çok önemli kavramlardan bahsedeceğim.

Nhibernate üzerinde daha önce çalışmayanlar için ilk olarak NHibernate’i kısa olarak anlatmakta fayda olacağını düşünüyorum. NHibernate, Java ortamında kullanılan Hibernate Orm Tool’unun Microsoft yani .Net ortamı için hazırlanmış Orm Tool’udur. Kullanabilmek için POCO sınıflarını hazırlamak ve bu sınıfların mapping file larını xml olarak hazırlamamız gerekmektedir.

POCO Sınıfları : Veri tabanımızdaki tabloları temsil eden aslında birer Entity’lerdir. Yani bu sınıfları kullanarak veri tabanı üzerinde işlemler yapılır. Örneğin veri tabanımızda bulunan ve banka bilgilerini tuttuğumuz Banka tablosunu temsil eden Banka isminde bir class yazılır. Artık veri tabanına bir banka bilgisi ekleyeceğimiz zaman bu class dan instance alıp bilgileri doldurup Nhibernate veya herhangi bir Orm mekanizmasına bu Entity’i göndeririz.

Mapping Files : Poco sınıflarımızı yazdıktan sonra veri tabanına yansıtabilmek için Orm’e gönderiyoruz. Fakat poco sınıfımız içerisindeki field ları veri tabanındaki tabloda bulunan kolonlar ile eşleştirmeyi nasıl sağlayacağız? Yani hangi field hangi kolonu temsil edecek? Bu bilgileri hazırladığımız xml dosyalarına Mapping File diyoruz.

Eğer projeniz içerisinde NHibernate Orm Tool’unu kullanmaya karar verdiyseniz, çok iyi bilmeniz ve hem Framework tarafında hem de application tarafında işlemler yaparken mutlaka göz önünde bulundurmanız gereken birkaç konu bulunmaktadır. Bunlar NHibernate Session ve Flush işlemleri.

Session : NHibernate kullanarak veri tabanı üzerinde işlemler yapabilmek için mutlaka Session oluşturmamız gerekmektedir. Bu nedenle Session yönetimini çok iyi düşünmek ve tasarlamak gerekmektedir. Farklı Session management yaklaşımları mevcuttur. Bunlardan 2 tanesinden kısaca bahsetmek gerekirse:

  1. Uyguluma açıldığında Session açılır ve uygulama kapanana kadar Session kapanmaz. Uygulama sonlandırıldığında Session da sonlandırılır.
  2. Yapılacak olan her işlem öncesi Session açılır ve işlem tamamlandıktan sonra Session kapatılır.

NHibernate kullanarak veri tabanı üzerinde işlem yapabilmek için oluşturduğumuz tüm Entityler ve bu Entitylere Application Layer üzerinde yaptığımız işlemler sonucu yüklediğimiz değerler, açılan Session üzerinde tutulur. Bu nedenle Session yönetimin ve Session işlemlerini iyi tasarlamak ve yönetmek gerekir.

Flush : NHibernate ,
Session içerisinde oluşturmuş olduğumuz Entityler üzerinde işlemler yaparken veya başka Entityler yüklerken Session içerisinde var olan Entitylerdeki değerleri kaybetmemek için Session içerisindeki Entityleri ve değerlerini Dirty olarak yani eski veya kirli olarak görüp veri tabanına yansıtmaya çalışır. Bu durumda tekrardan Session yönetiminin önemi gün yüzüne çıkmakta ve buna ek olarak Session içerisinde oluşturulan Entitylerin yönetiminin de önemi ortaya çıkmaktadır. Bahsedilen bu Flush olma durumunun ve hangi durumda Flush işleminin yapacağını yani Dirty olan Entity’leri hangi durumlarda veri tabanına yansıtmaya çalışacağını belirtebiliyoruz. Bu ayarlama için Session’ın FlushMode özelliğini kullanabiliriz. Var olan FlushMode’lar :

Never : Hiçbir zaman Dirty olan Entityleri veri tabanına yansıtmaya çalışma demektir. Bu durumu kullanırsak eğer tüm kontrolüm bizde olduğunu kabul edip kontrollü olarak işlemler yapmamız gerekmektedir.

Commit : Transaction kullanılıyorsa ve bu Transaction Commit olduğu zaman Dirty Entityleri veri tabanına yansıt.

Auto : Dirty Entityleri veri tabanına yansıtma kontrolünü Nhibernate’e teslim etmek anlamına geliyor.

Always : Session içerisindeki Entityler üzerinde herhangi bir en ufak sorguda ki bu işlem Select dahil de olsa, Dirty Entityleri veri tabanına yansıt demektir.

Özetleyecek olursak eğer projemiz içerisinde Nhibernate kullanacaksak NHibernate’in Session yönetimini çok iyi tasarlamamız ve Flush durumlarını çok iyi belirlememiz gerekmektedir. Aksi taktirde hiç beklemediğiniz anda Session üzerindeki Entitylerin uçtuğunu, Session’ın sonlandığını, NHibernate’in hiç olmayacak yerde veri tabanına update attığını görürsünüz ve bu durumlar planlanmadığı için uygulamanın belik çok kritik durumlarda hata verdiğini görebilirsiniz.

Umarım faydalı olmuştur. Bir sonraki makalemizde görüşmek dileğiyle.

Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

www.mshowto.org

Yorum Yap

Yazar Hakkında

İzmir Atatürk Anadolu Teknik Lisesi, Dokuz Eylül Üniversitesi Bilgisayar Teknolojisi ve Programlama Bölümü mezunuyum. Şuan Dokuz Eylül Üniversitesi Bilgisayar Mühendisliği Bölümünde son sınıftayım. Yazılım ile 2004 yılında tanıştım ve yaklaşık olarak 4-5 yıldır piyasaya freelance olarak proje geliştiriyorum. Ek olarak MCP unvanına sahibim.

Yorum Yap

Yorumlar (1)

  1. Koray hocam emeğinize sağlık çok guzel ve yararlı bir makale olmuş çok teşekkür ederim bu guzel bilgiler için