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

 Evet arkadaşlar NHibernate Helper'ın devamını anlatıyoruz. 

Öncelikle DataAccess adında bir Class Library adında bir proje oluşturuyoruz. 

Ardından oluşturduğumuz proje içerisine Helper adında bir klasör oluşturuyoruz. Bu klasörü oluşturduktan sonra içerisine PostgresHelper adında bir class oluşturuyoruz. 

Oluşturduğumuz class' aynen şöyle olmalı; 
using Base.DB.Helper;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using Microsoft.Extensions.Configuration;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
using System.Reflection;

public class PostgresHelper : NHibernateHelper
    {
        private IConfiguration Configuration;
        public PostgresHelper(IConfiguration configuration)
        {
            Configuration=configuration;
        }
        protected override ISessionFactory InitializeFactory()
        {
            ISessionFactory build = Fluently
                              .Configure()
                              .Database(MsSqlConfiguration.MsSql2012.ConnectionString(Configuration.GetConnectionString("MsSQLConnection")).ShowSql())
                              .Mappings(p => p.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly()))
                              .ExposeConfiguration(TreatConfiguration)
                              .BuildSessionFactory();
            //var build = Fluently
            //    .Configure()
            //    .Database(PostgreSQLConfiguration.PostgreSQL82.ConnectionString(Configuration.GetConnectionString("PostgreSQLConnection")))
            //    .Mappings(p => p.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly()))
            //    .ExposeConfiguration(TreatConfiguration)
            //    .BuildSessionFactory();
           

            return build;

        }

        private static void TreatConfiguration(Configuration configuration)
        {
            var update = new SchemaUpdate(configuration);
            update.Execute(false, true);
        }

    } 
Öncelikle arkadaşlar base katmanında yazmış olduğumuz NHibernateHelper class'ımızı buradan miras verdik. 

public class PostgresHelper : NHibernateHelper

 

ardından  burada override işlemi yaparak bize InitializeFactory methodunu oluşturuyor ve biz bu methodun içerisini şu şekilde dolduruyoruz;


 protected override ISessionFactory InitializeFactory()
        {
            ISessionFactory build = Fluently
                              .Configure()
                              .Database(MsSqlConfiguration.MsSql2012.ConnectionString(Configuration.GetConnectionString("MsSQLConnection")).ShowSql())
                              .Mappings(p => p.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly()))
                              .ExposeConfiguration(TreatConfiguration)
                              .BuildSessionFactory();
            //var build = Fluently
            //    .Configure()
            //    .Database(PostgreSQLConfiguration.PostgreSQL82.ConnectionString(Configuration.GetConnectionString("PostgreSQLConnection")))
            //    .Mappings(p => p.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly()))
            //    .ExposeConfiguration(TreatConfiguration)
            //    .BuildSessionFactory();
           

            return build;

        }

 Şimdi arkadaşlar override ettiğimiz method'ın içerisini artık dolduruyoruz. 

  • Fluently.Configure().Database(MsSqlConfiguration.MsSql2012.ConnectionString(Configuration.GetConnectionString("MsSQLConnection")).ShowSql())
    • Burada arkadaşlar Hangi Veritabanı Yönetim sistemini kullanıcağımızı belirtiyoruz ve ardından bu veritabanına ihtiyaç duyulan connectionstring bilgisini giriyoruz. 
  • .Mappings(p => p.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly())) 
    • Burada ise veritabanının db sutunlarının özelliklerini alması için map class'larını alacağı yeri belirtiyoruz. 
  • .ExposeConfiguration(TreatConfiguration) .BuildSessionFactory();
    • Burada ise bu veritabanına yapılacak migrate işlemlerinini durumunu belirtiyoruz 
  •  private static void TreatConfiguration(Configuration configuration)
            {
                var update = new SchemaUpdate(configuration);
                update.Execute(false, true);
            }
  • Migrate işlemlerini TreatConfiguration'dan yapıyoruz. update.Execute(false, true); yöntemi veritabanında verileri bozmadan ilgili tabloları create ediyor. Tabi bu işlem proje çalıştırıldığında herhangi bir veritabanı işlemi gerçekleşirken yapılıyor (insert update delete list vb.)
Arkadaşlar bunu da yaptıktan sonra projemizin api katmanının program.cs tarafına geliyoruz buraya da base ve dataacces tarafında yazdığımız helper'ları inject'e etmeye unutmayın; 
builder.Services.AddScoped<NHibernateHelper, PostgresHelper>();

Artık bu inject'e işlemide gerçekleştiğine göre OpenSession dendiğinde bir alt katmanda hangi db için bir session açılacaksa gider açar ve ilgili oturum bilgisi InitializeFactory'den alınmış olur. 

Bu gün ki yazımız bu kadar arkadaşlar bir sonraki yazımızda görüşmek ümidiyle esen kalın salıcakla kalın.

 

Yorum Gönder

0 Yorumlar