NHibernate Nedir?

MaskHacker

Uzman üye
14 Eki 2013
1,531
3
C:/
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.

040315_0704_NHbinernate1.png


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.

Referans:mshowto​
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.