C#nedir?com
 
YAZAR HAKKINDA
Timuçin Dursun
Timuçin Dursun
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
1 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: dosyasini explorer iliskisel islemleri istediginiz izleyerek komutu nhibernate nhibernate’i projemize solution string veritabani veritabanina yolunu C# / VC#/.NET Timuçin Dursun
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 18.4.2007
Okunma Sayısı : 48866
Yorum Sayısı : 10     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 11.4.2021
Turhal Temizer
Mac OS/X Removing CUDA 11.4.2021
Burak Selim Şenyurt
Tie Fighter Değil, Project Tye! 11.4.2021
Burak Selim Şenyurt
Stackoverflow Sevgi Anketinde Yıllardır Bir Numara Çıkan Programlama Dili Rust Kimdir? 11.4.2021
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
NHibernate ile ORM'e Giriş
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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
  • Yazılan Yorumlar
  • Yorum Yaz
KAS
13
2009
DLINQ ve Nhibernate ikisini de kullanan arkadaşlar var mı ? Performans yada kullanımıyla ilgili farklılıklarını ve tercihini iletebilir mi ? (Entity katmanı için nesneleri Arraylistlere doldurmak vazgeçmeyi düşünüyorum de artık :) .)
AĞU
4
2008
bence de nhibernate .net yazılımcılarının bir çok problemini halledecek gibi görünüyor, ben de projelerimde yavaştan kullanmaya başladım, kodlama hızı ve bakım konusunda çok avantaj sağladığı kesin. tşkler...
HAZ
27
2008
Nhibernate ile kurumsal uygulamalar geliştiriyoruz.Şu anda Tubitak UEKAE Bilgi Sistemleri altyapısı Nhibernate üzerinde sorunsuz şekilde çalışıyor. Ufak tefek örneklerle binlerce geliştiricinin üzerinde hem fikir olduğu bir teknoloji için atıp tutmak ve böyle bir teknolojiyi Dataset ile karşılaştırmak çok amatörce bir yaklaşım. İşimizi hangi teknoloji kolaylaştırırsa onu kullanırız:Nhibernate,ibatis,Activerecord yada dataset... Yüzbin kaydı nhibernate ile çekip datagride mi bağlıyorsunuz.Eğer öyleyse siz dataset kullanmaya devam edin.
MAR
25
2008
hibernate teknolojosi giderek yaygınlaşan ve OOP ile bütünleşen bir mantık haline gelmiştir. Kurumsal projeler hibernate teknolojisini benimsemektedir. Öğrenilmesi ve uygulanması faydalıdır. performans sıkıtıları ise zamanla aşılıyor. kendi hibernate teknolojinis geliştirebilir ve persformansınızı siz iyileştirebilirsiniz.
MAY
22
2007
Yorum yapan arkadaşlara nhibernatee ilgi duyduklari icin öncelikle teşekkür ediyorum. Burdaki fikirlerin bir kısmına katiliyorum fakat bazıları çok idealistce. Öncelikle gerçek hayatta geliştirdiğimiz uygulamalarda bile 100000 bin kayıttan bahsetmek mümkün değil. Bu rakamı hep minumuma çekmeye çalışıyoruz. Bunun dışında nhibernate zaten enterprise uygulamalar için geliştirilmiştir. Performansı tartışılır fakat güvenilirlik ve projenin bakım aşamasında bize sağladığı yararlar tartışılmaz. www.mygenerationsoftware.com adresindeki OR Mapping tool ilede makalede anlatılan işlemleri kısa sürede yapabilirsiniz. Kurumsal bir uygulama geliştiriyorsak ve nhibernate kullanmaya karar verdiysek HSQL gibi bir dili öğrenmek pekde problem olmayacakdır sanırım. teşekkürler...
MAY
22
2007
Caner Şahan arkdaşımıza: 100 bin üzeri kaydı bir anda veritabanından çekmeyi performans testi için yapmıştım. Tabii ki gerçek projede böyle bir şey yapmıyorum. Zaten en önemli sorun o değil. Programlama yaparken sık sık yaptığımız bir işlem var ki tabloları join ederek kayıt alırız. Böyle olmadı şöyle olsun diye bunlar üzerinde de sık sık değişiklik yaparız. Join kullanılmış sql cümlecikleri için mapping (uygun class ve xml dosyasının oluşturulması) işlemi yapılabilen bir araç yok bildiğim ve manuel olarak yapılmak zorunda bu da epeyce uzun bir iş. Hibernate de map edilmeden tabloları join eden sql kullanımını biliyorsanız söyleyin lütfen.
MAY
16
2007
Nhibernate ile ilgili makaleniz için teşekkürler. Türkçe güzel bir kaynak olmuş. Diğer arkadaşın yorumlarına cevaben,nhibernate bir çok projede kullanılmakta ve kullanılacaktırda. Fakat burda siz bir tablodaki dataları datasete??? felan doldurmaktan bahsediyorsunuz. Zaten 100 bin satır bir dataset objesi ile ilişkilendirmeniz yanlış . Böyle büyük dataların ram üzerine çekilmesi ve ramde işlenmesi söz konusu bile olmamalı. Ben Nhibernatei biraz daha araştırmanız ve yöntemlerinizi bir daha irdelemenizi tavsiye ederim. Saygılar
NİS
22
2007
Nhibernateyi javacı arkadaş tavsiye etti diye bir göz attım. Hiç kullanmadım. Ama onu ararken bunu buldum http:www.codeplex.comactionpack Bunu kullanırım işte :)
NİS
18
2007
Uzun süre nhibernate kullandım fakat arkadaşlara tavsiye etmiyorum. Başlıca sebeplerini saymak gerekirse: 1-Örneğin yüzbin üzeri kayıt bulunan bir tablodan kayıt çekmek istediğinizde command.ExecuteReader yönetmiyle 1 sn de kayıtlar alınıyor, datasete yüklemek ise 4-5 sn sürüyor fakat nhibernate ile bir buçuk dakika sürüyor. Bazı performans ayarlamalarıyla bu süre çok az düşürülebiliyor. 2-Yukarda farketmişsinizdir bir tablo için bir class ve de bir xml dosyası oluşturuyorsunuz. Bu sorun değil mygeneration benzeri programlar ile veritabanından tablolarınızı seçip class ve xml dosyalarını otomatik oluşturabilirsiniz. Fakat kompleka sql cümlecikleri kullanmanız gerektiği zaman bu işlem geçerli değil tabii ki. Bu durumda manuel olarak oluşturduğunuz xml dosyasında diğer classlar ile bağlantıyı tanımlamak zorundasınız, sonra kendisinin HSQL denilen yöntemiyle sql yazıp kullanmak zorundasınız ki işkence haline geliyor. Kaldı ki arkadaşlar bilirler bu kompleks sql i sık sık değiştirmeniz de gerekebilir programınızı yazarken. Sonuç olarak eğer projenizin her türlü veritabanından çalışmasını mutlaka istemiyor iseniz gerek yok diyebilirim. Alternatif olarak bu işlem için provider modelini kullanabilirsiniz. Yani projeniz.sqldataprovider.dll, projeniz.mysqldataprovider.dll, projeniz.sqlitedataprovider.dll gibi istediğiniz provider dll lerinin, abstract sınıfları barındıran projeniz.dataprovider.dll dosyasındaki metodları override ececeği bir sistem. Hangi veritabanının kullanılacağını da config dosyasına vs koyup kodlarınızla kayıtların hangi dataprovider.dll dosyası üzerinden işleneceğini ayarlıyorsunuz. Bunun dezavantajı ise sql cümleciklerini ve bazı kodları her dataprovider içerisinde değiştirmek zorunda kalabilmenizdir. Kendi tavsiyem relational veritabanları değil tamamen sql kullanılmayan, obje serializasyon mantığıyla çalışan db4o olacak. Kendi testlerimde sql server da datasete yaklaşık 200 sn de yüklenen bir tablo db4o ile 0.75 sn de yükleniyordu. Kullanımı da çok basit ama henüz derinlemesine incelemedim. Hibernate için denemedim ama tahminim o da dakikalar alır.
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • 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