Fluent NHibernate İle Otomatik Tablo Oluşturmak


5 Temmuz 2015 Hikmet Okumuş Fluent NHibernate

Fluent NHibernate ile oluşturmuş olduğumuz Map sınıflarını database üzerinde otomatik olarak tablo oluşturmak istersek NHibernateHelper sınıfı içerisinde ufak bir ekleme yapmamız gerekecektir. NHibernateHelper sınıfına daha önce anlatmış olduğum NHibernate bağlantı makalelerinden ulaşabilirsiniz.
Düzenlemeden önceki InitializeSessionFactory() metodunun içeriği aşağıdaki gibidir.
    private static void InitializeSessionFactory()  
    {  
        _sessionFactory = Fluently.Configure().Database(MsSqlConfiguration.MsSql2008  
            .ConnectionString(@"Server=ServerAdi;initial catalog=DatabaseAdi; user=KullaniciAdi;password=Parola;").ShowSql())  
            .Mappings(m => m.FluentMappings.AddFromAssembly(typeof(Program).Assembly))  
            .BuildSessionFactory();  
    }  
Otomatik oluşturma işlemi için aşağıdaki kod parçasını metodumuza ekliyoruz.
ExposeConfiguration(cfg => new SchemaExport(cfg).Create(true, true))
Metodumuzun son hali aşağıdaki gibi olacaktır.
        private static void InitializeSessionFactory()
        {
            _sessionFactory = Fluently.Configure().Database(MsSqlConfiguration.MsSql2008
                .ConnectionString(@"Server=ServerAdi;initial catalog=DatabaseAdi; user=KullaniciAdi;password=Parola;").ShowSql())
                .Mappings(m => m.FluentMappings.AddFromAssembly(typeof(Program).Assembly))
                .ExposeConfiguration(cfg => new SchemaExport(cfg).Create(true, true))
                .BuildSessionFactory();
        }
Bu işlemden sonra InitializeSessionFactory() metoduna ilk erişim sağlandığında database üzerinde otomatik olarak tablolar oluşacaktır. Burada şöyle birşey ile karşılaşacaksınız. Output ekranından izlerseniz, uygulamanızı her yeni başlattığınızda ve InitializeSessionFactory() metoduna ilk ulaştığınızda database üzerinde bulunan tabloların silinip tekrar oluşturulduğunu göreceksiniz.
Aşağıdaki yöntemi kullanırsanız varolan tablolarınız silinmez ve yapmış olduğunuz değişiklikler (yeni bir tablo ya da bir tablo içine yeni bir alan eklediğinizde) database üzerine uygulanır.
        private static void InitializeSessionFactory()
        {
            _sessionFactory = Fluently.Configure().Database(MsSqlConfiguration.MsSql2008
                .ConnectionString(@"Server=ServerAdi;initial catalog=DatabaseAdi; user=KullaniciAdi;password=Parola;").ShowSql())
                .Mappings(m => m.FluentMappings.AddFromAssembly(typeof(Program).Assembly))
                .ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(true, true))
                .BuildSessionFactory();
        }

Başarılar dilerim.



Yorum Ekle