|
NHibernate ile ORM'e Giriş |
|
Gönderiliyor lütfen bekleyin... |
|
|
Hakia.com’un iş ilanlarındada
görmeye başladığımız NHibernate sizce nedir?
NHibernate ile hiç SQL komutu yazmadan veritabanı işlemleri
yapabiliyoruz dersem çok abartmış olduğumu düşünebilirsiniz. Fakat şaşılacak
şekilde NHibernate ile projelerimizde SQL komutu kullanmaya gerek kalmıyor.
Verilerimizi, yine projemiz içerisindeki nesne modelleri ile bağlayıp veritabanına
taşıyabilmekteyiz. NHibernate çok katmanlı mimaride orta katman(business logic)
dediğimiz kısımda yapılan veritabanı işlemlerinde büyük kolaylıklar sağlamaktadır.
Bu makale NHibernate’i en basit şekliyle .NET kullanıcılarına tanıtmak amacıyla
yazılmıştır.
Bu günün kurumsal uygulamalarında nesne tabanlı ve ilişkisel veritabanı kullanılarak
yazılım geliştirmek can sıkıcı hatta çok zaman alıcı bir iş olmaktadır. NHibernate
.NET yazılım geliştirme ortamında nesnel/ilişkisel eşleştirme(object/relational
mapping-ORM) aracıdır. ORM terimi bir nesne modelinden SQL tabanlı ilişkisel
veri modeline(ilişkisel veritabanına) veri bağlama tekniğidir.
Çoğu kişi makaleyi okuduk’dan sonra NHibernate’i C# 3.0 la birlikte gelen DLINQ
mimarisine benzetebilir ve bunda yanılmışta sayılmaz. Çünkü ikisinde de amaç
hemen hemen aynıdır.
Bu kadar sözün ardından basit bir uygulama yaparak NHibernate’i
tanıyalım.
Öncelikle aşağıdaki işlemleri yapmanız gerekmektedir.
http://sourceforge.net/project/showfiles.php?group_id=73818&package_id=138561
web adresinde “NHibernateContrib” adlı zip dosyasını download ediniz.
---------------------------------------------------------------------------------------------------
“NHibernateContrib” adlı zip dosyasını ana dizininiz içerisinde istediğiniz
bir konuma açınız.
---------------------------------------------------------------------------------------------------
Bu işlemleri yaptıkdan sonra VS içerisinde New->Project->Console Application
yolunu izleyerek “NHibernate“dışında bir isim vererek yeni bir proje açın. Bu
örnekteki projeye “ormornek” adını verdik. Bu ad daha sonraki işlemlerde veritabanına
bağlantı sırasında kullanılacakdır.
---------------------------------------------------------------------------------------------------
Yeni projeyi oluşturdukdan sonra projemize yeni bir class ekleyelim. Yeni class
dosyasının adı ile class adı aynı olsun.(örneğin; dosya adı: ogrenci.cs ve class
adı:ogrenci) Ben burada class adına “ogrenci” dedim. ogrenci class’ının içeriği
aşağıdaki gibi olacak.
Dosya adı:
ogrenci.cs
--------------------------------
using System;
using System.Collections.Generic;
using System.Text;
namespace ormornek
{
class ogrenci
{
private
int _id;
private
string _ad;
private
string _soyad;
public
int Id
{
get
{ return _id; }
set
{ _id = value; }
}
public
string Ad
{
get
{ return _ad; }
set
{ _ad = value; }
}
public
string Soyad
{
get
{ return _soyad; }
set
{ _soyad = value; }
}
}
}
|
Ogrenci class’ını
oluşturduk dan sonra veritabanımızda bu nesne modeline uygun bir tablo oluşturmamız
gerekli. Bu tablo ve veritabanı adına dikkat ediniz. Gerekli kodlar,
CREATE TABLE
[dbo].[ogrenci](
[id] [int] NOT NULL,
[ad] [nvarchar](50) NULL,
[soyad] [nvarchar](50) NULL
) |
Not: veritabanı
için MSSQL 2005\SQL EXPRESS kullanıldı.
---------------------------------------------------------------------------------------------------
Şimdi en önemli kısımlardan biri olan ORM bağlama işlemini yapacağız. Öğrenci
nesne modelimiz ile ilişkisel veritabanındaki veri yapımızı birbirine bağlıyacak
olan NHibernate konfigürasyon dosyasını düzenleyeceğiz. Bu dosyaya mapping file
yada Türkçe adıyla eşleştirme dosyası diyebiliriz.
Projemizin ana
dizinine “ogrenci.hbm.xml” adlı bir xml dosyası oluşturalım. NHibernate te kullanılan
mapping dosyalarının uzantıları genellikle “*.hbm.xml” dir. Ayrıca bu dosyaya
solution explorerdan sağ tıklayıp properties’ine girdikden sonra built action
özelliğini “Embedded Resource” yapmamız gerekmektedir. Eğer bunu yapmaz iseniz
büyük ihtimalle hata mesajı ile karşılaşırsınız.
Xml dosyasının içeriği de aşağıdaki gibi olsun.
Dosya adı: ogrenci.hbm.xml
--------------------------------
<?xml version="1.0"
encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
<class name="ormornek.ogrenci, ormornek" table="ogrenci">
<id name="Id" column="id" type="int">
<generator class="assigned" />
</id>
<property name="Ad" column="ad" type="String"
length="50"/>
<property name="Soyad" column="soyad" type="String"
length="50"/>
</class>
</hibernate-mapping> |
Dosya içeriğindeki
<class> tag’ında
<class name="[namespace].[class name], [assembly name]”
table=”tablename”> sırası izlenmektedir.
Şimdi sıra geldi
projemize App.config dosyasını eklemeye. Bu işlemi solution
Explorer penceresine sağ tıklayıp ->Add->New Item->Application
Configuration File yolunu izleyerek yapabiliriz. App.config dosyası solution
Explorer penceresinde gözüküyor olmalı. App.config dosyası
içerisinde <configuration>...</configuration>
tagları arasına aşağıdaki kodları yazdığımızda veritabanı bağlantısı için gerekli
işlemleride yapmış oluruz. (Bu uygulamada MSSQL 2005-SQLEXPRESS kullanılmıştır.)
Bu dosya içerisindeki
<nhibernate>…</ nhibernate> tagları arasındaki parametreler
veritabanı bağlantısı için gereklidir ve opsiyoneldirler. Kullanmak istediğiniz
yada başka değişle bağlantı kurmak istediğiniz veritabanına göre değişiklik
gösterebilirler.
Dosya adı:
app.config
-------------------------------------------------------------------
<?xml
version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section
name="nhibernate"
type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
/>
</configSections>
<nhibernate>
<add
key="hibernate.connection.provider"
value="NHibernate.Connection.DriverConnectionProvider"
/>
<add
key="hibernate.dialect"
value="NHibernate.Dialect.MsSql2000Dialect"
/>
<add
key="hibernate.connection.driver_class"
value="NHibernate.Driver.SqlClientDriver"
/>
<add
key="hibernate.connection.connection_string"
value="Data Source=TIMUCIN\SQLEXPRESS;Initial Catalog=timucin;Integrated
Security=True"
/>
</nhibernate>
</configuration>
|
En işlemlerden
biride NHibernate.dll kütüphanesini projemize eklemektir. Solution explorer
penceresinde references üzerine sağ tıklayıp->add references-> yolunu
izleyerek “NHibernateContrib” adlı zip dosyasını açtığımız dizinin içinde bulunan
bin dizininin içine gireriz. Bin dizini içerisindeki NHibernate.dll dosyasını
projemize referans olarak ekleriz.
Son işlemimiz olarak
main fonksiyonumuzun bulundugu class’ı yani program.cs dosyamizin icine aşağıdaki
kodu yazarak asıl yapmak istedigimiz işi gerçekleştirmiş oluruz.
Aşağıdaki kod ile
veritabanına 3 kayıt eklenip 1 kayıt silinmektedir.
Ayyrıca burada
dikkat etmeniz gereken bir husus daha bulunmaktadır. Program.cs dosyasına
using
NHibernate;
using NHibernate.Cfg;
namespace’lerini
eklemeyi unutmamalısınız.
//Dosya adı:
program.cs
using System;
using System.Collections.Generic;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
namespace ormornek
{
class Program
{
static
void Main(string[] args)
{
Configuration
cfg = new Configuration();
cfg.AddAssembly("ormornek");
// projenin assembly adı
ISessionFactory
factory = cfg.BuildSessionFactory();
ISession
session = factory.OpenSession();
ITransaction
transaction = session.BeginTransaction();
ogrenci
ogr1 = new ogrenci();
ogr1.Id
= 1;
ogr1.Ad
= "timuçin";
ogr1.Soyad
= "dursun";
ogrenci
ogr2 = new ogrenci();
ogr2.Id
= 2;
ogr2.Ad
= "bahar";
ogr2.Soyad
= "dursun";
ogrenci
ogr3 = new ogrenci();
ogr3.Id
= 3;
ogr3.Ad
= "tufan";
ogr3.Soyad
= "dursun";
//
NHibernate nesne örneğini sql komutu kullanmadan veritabanına kaydediliyor.
session.Save(ogr1);
session.Flush();//
nesne veritabanına yollanıyor
session.Clear();//
baska nesneyi oturuma almak icin onceki siliniyor
session.Save(ogr2);
session.Flush();
session.Clear();
session.Save(ogr3);
session.Flush();
//
NHibernate nesne örneğini sql komutu kullanmadan veritabanından siliyor.
session.Delete(ogr3);
//
tüm değişiklik doğrulanıyor ve oturum kapatılıyor.
transaction.Commit();
session.Close();
//
kaydedilen veriler veritabanından okunuyor
session
= factory.OpenSession(); // yeni bir oturum açılıyor
System.Collections.IList
userList = session.CreateCriteria(typeof(ogrenci)).List();
foreach
(ogrenci ogr in userList)
{
Console.WriteLine("Id:{0}
\t ad:{1} \t soyad:{2}", ogr.Id,ogr.Ad,ogr.Soyad);
}
session.Close();
}
}
}
|
Programı derlediğiniz
zaman bir hata mesajı ile karşılaşmaz iseniz veritabanına 2 tane kayıt yapılmış
olduğunu göreceksiniz.
Solution explorer
görünümü
Makalemizin sonuna
gelmiş bulunuyoruz. İşlemler çok uzun gibi gözüksede alışkanlık edindikten sonra
SQL komutları kullanmadan veriler üzerinde işlem yapmanın keyfine doyamıyacaksınız.
NHibernate geleceğin ORM tekniği ile veritabanı kullanım yöntemidir.
Bu teknik ile geliştirmiş olduğunuz projelerde veritabanı işlemlerini kolaylıkla
yapabilirsiniz.Ayrıca gelecekde doğabilecek değişikliklerin üstesinden çok hızlı
ve etkin bir şekilde gelebilirsiniz.
Microsoft tarafında
ORM teknolojisinin karşılığı olarak DLINQ geliştirilmektedir.( Burak Selim Şenyurt
’un “C# 3.0 - İlk Bakışta DLINQ” makalesinde detaylı bilgi bulabilirsiniz )
NHibernate ile
ilgili daha ayrıntılı bir makale ile görüşmek dileğiyle.
Gerekli dokümanları
ve ayrıntılı bilgiyi aşağıdaki web adresinde bulabilirsiniz.
http://www.hibernate.org/365.html
Makale:
NHibernate ile ORM'e Giriş C#, Visual C# ve .NET Timuçin Dursun
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|