NHibernate Nedir? Ne İşe Yarar? Nasıl Kullanılır? Generic NHibernate Helper Oluşturma

Selamun Aleyküm değerli Albatu Yazılım takipçileri hoş geldiniz.


Bugün .Net'te Entity Framework'ten sonra en çok kullanılan ORM olan NHibernate ORM'inden bahsedeceğim.
NHibernate'in serüveni Tom Barrett'le birlikte başladı ve daha sonra Mike Doerfler ve Peter Smulovics tarafından geliştirme süreci devam ettirildi. 2005 yılının sonunda, JBoss A.Ş. devraldı ve  bu şirket NHibernate'i geliştirmesi için Sergey Koshcheyev'i  görevlendirdi. 2006 yılının sonunda JBoss A.Ş NHibernate'e verdiği desteği durdurdu. NHibernate şimdi tamamen topluluklar tarafından geliştirilen açık kaynak kodlu bir yazılım haline gelmiştir..

NHibernate · GitHub hesabından kaynak kodlarına erişebilirsiniz. 

NHibernate bir çok veritabanını desteklemektedir ve bunu uzun yıllardır yapmaktadır. Lazy Load (tembel yükleme) özelliği de bulunmaktadır. 

Şimdi öncelikle NHibernate'ş nasıl kullanırımla başlayalım; 

Visual Studio'muzu açalım; 

Base adında bir Class Library projesi oluşturalım; 

Ardından Projemize sağ tıklayıp Manage Nuget Package diyelim ardından browse tıklayalım ve NHiberanate yazalım Karşımıza aşadağı ki resimde ki gibi NHibernate çıkacak. 


NHibernate'i projemize  yükledikten sonra projemizi açıp içerisine Helper adında bir klasör oluşturalım ve içerisine de NHibernateHelper adında bir class oluşturalım; 

Bu class'ı oluşturduktan sonra içerisine artık helper'ı ayağa kaldırmamıza yarayacak bir yapıyı ayağa kaldırabiliriz. 

Öncelikle oluşturacağımız class abstract bir class olmalıdır; Kodda ki gibi 

 public abstract class NHibernateHelper : IDisposable
    {

        private static ISessionFactory _sessionFactory;
        public virtual ISessionFactory SessionFactory { 
            
            get { return _sessionFactory ?? (_sessionFactory = InitializeFactory()); }
                
        }
        protected abstract ISessionFactory InitializeFactory(); 
        public virtual ISession OpenSession()
        {
            return SessionFactory.OpenSession();
        }

        public void Dispose()
        {
            GC.SuppressFinalize(this);
        }
    }

Kodda gördüünüz üzere öncelikle bir instance oluşturduk ayrıca bu class'ı IDisposable'dan da implement ettik ve implement ettikten sonra   void Dispose() methodu geldi ve bu methodun içerisinde Garbage Collector sınıfının içerisinde yer alan SuppressFinalize methodunu çağırdık.  GC.SuppressFinalize(this); methodu veritabanında açık oturumlar varsa bellekte yer kaplamasını engeller ve temizler serbest bırakır. 

OpenSession() insert update delete gibi yapıları kullanacağımız zaman veritabanında bu yazma işlemlerini gerçekleştirmek için bir oturum açar ve siz insert update delete yapmaya başladığınızda çalışır. 

OpenSession ISessionFactory interface'in içinde yer alan ISession'dan türeyen bir methoddur yukarıda bahsettiğim işlemi yapar.

Bizim kendi yazdığımız OpenSession Methodu çağırıldığında gider yukarıda oluşturuğumuz  
public virtual ISessionFactory SessionFactory { 
            
            get { return _sessionFactory ?? (_sessionFactory = InitializeFactory()); }
                
        }

methodunu çağırır ve biz bu bilgileri yukarıda oluşturmuş olduğumuz _sessionfactory nesnesinden alırız eğer gerekli oturum açılmamışsa InitializeFactory prototip'inden gider bu oturumu temin eder. 

InitializeFactory bir alt katmanda yazdığımız DbHelper class'mızda hangi veritabanı yönetim sistemini kullanıyorsak gider ondan oturumu temin eder ve _sessionFactory yi doldurur dolan sessionFactory de OpenSession'ını ayağa kaldırır.  

Evet arkadaşlar bu dersimizde buraya kadar bir sonraki derste bir alt katmanda temin ettiğim Session'ı birlikte inceleyelim. 

 

        

 

Yorum Gönder

0 Yorumlar