Tags: , | Categories: asp.net, c#, nhibernate Posted by Admin on 3/6/2011 12:39 PM | Comments (1)

Daha önceki yazımda bahsettiğim gibi korkutucu yazıların aksine basit örneklerle devam etmeyi uygun görüyorum. Bu yazıda NHibernate ile basit bir veri yapısını nasıl modeller ve kullanırız sorusuna yanıt arıyoruz diyelim.

NHibernate de geleneksel olarak veri yapıları xml dosyaları ile yapılıyor ancak sınıf temelli yazmamanın daha uygun olduğunu düşünüyorum. Örneğin bir öğrenci veri yapısında öğrenci no, adı, soyadı gibi alanların xml içinde tanımlanmasında kuşkusuz bir sorun yok ancak ayrıca bir öğrenci sınıfının yazılmasına da ihtiyaç duyuyor. Öyleyse neden xml ihtiyaç var ki? sorusunu soranlardan olarak yaptığım araştırma sonucunda Fluent NHibernate'i keşfettim. Bu yazıda Fluent NHibernate ile ilgili örnekler üzerinden devam edelim.

Merhaba dünya projesi için izlenmesi gereken adımlar şöyle olmalı:

1) Fluent NHibernate'in son sürümü bakkaldan alınmalıdır. (İndir)
2) İndirilen NHibernate dll'leri bir güzel yıkanıp zipten çıkarılmalı ve projemize referans edilmelidir.
3) Konfigurasyon ile ilgili kodlar yazıldıktan sonra, öğrenci sınıfı ile ilgili kodlar yazılmalıdır.

NHibernate'i indirip referans ettikten sonra veritabanı ayarları için aşağıdaki xml dosyasını tanımlayalım.


<?xml version="1.0" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string">server=.;database=tb;integrated security=true;</property>
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
  </session-factory>
</hibernate-configuration>

Aşağıdaki kod ile ayarı okutalım:

var configuration = new Configuration();
configuration.Configure("DatabaseConfiguration.xml"); // Veritabanı ayarlarını oku
configuration.AddAssembly("NHibernate_HelloWorld"); // Hangi veri yapılarını okuyacağını anla

 


Öğrenci sınıfını aşağıdaki gibi tanımlayalım:

 

namespace NHibernate_HelloWorld
{
    using System;
    using FluentNHibernate.Mapping;

    public class Ogrenci
    {
        public virtual int OgrenciId { get; set; }

        public virtual string AdiSoyadi { get; set; }

        public virtual DateTime DogumTarihi { get; set; }
    }

    public class OgrenciMap : ClassMap
    {
        public OgrenciMap()
        {
            Id(x => x.OgrenciId);
            Map(x => x.AdiSoyadi);
            Map(x => x.DogumTarihi);
        }
    }
}

 

Konsol uygulamasına ait kodlama'da aşağıdaki gibi olsun:

 

using System;
using NHibernate.Cfg;
using NHibernate;
using FluentNHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;

namespace NHibernate_HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Program başldı");
            
            using (var sessionFactory = GetSessionFactory())
            {
                Console.WriteLine("Session Factory oluşturuldu");

                using (var session = sessionFactory.OpenSession())
                {
                    Console.WriteLine("Session oluşturuldu");

                    Ogrenci ogrenci = new Ogrenci();
                    ogrenci.AdiSoyadi = "Ömer Faruk ZORLU";
                    ogrenci.DogumTarihi = new DateTime(1987, 7, 27);

                    session.Save(ogrenci);
                    Console.WriteLine("Öğrenci kaydı eklendi");
                }
            }
                
        }

        static ISessionFactory GetSessionFactory()
        {
            Configuration configuration = new Configuration();
            configuration.Configure("DatabaseConfiguration.xml"); // Veritabanı ayarlarını oku

            return Fluently.Configure(configuration)
                            .Mappings(m => m.FluentMappings.AddFromAssemblyOf())
                            .ExposeConfiguration(BuildSchema)
                            .BuildSessionFactory();
        }

        static void BuildSchema(Configuration config)
        {
            new SchemaExport(config).Create(false, true);
        }
    }
}

 

Aşağıdaki videoda biraz daha açıklama çalıştım. Kafanız karıştıysa ve biraz daha karışsın istiyorsanız izleyin :)

Kahve ısmarlayın

Aşağıdaki kahve simgesine tıklayarak bana paypal üzerinden kahve ısmarlayabilirsiniz. Kahveye olan düşkünlüğü ile bilinen birisi olarak büyük bir zevkle içeceğimden emin olabilirsiniz.


Comments (1) -

Yavuz
Yavuz on 3/9/2012 2:16 PM Nhibernate deneyimine sahip adaylar aranıyor : http://www.elemanonline.com/eleman.php?id=1061447

Add comment




biuquote
Loading