31 Ağustos 2010 Salı

C# ile otomatik olarak veritabanı tablolarından sınıflar oluşturma

Merhaba, bu yaz Microsoft yaz okulunda öğrendiğim en güzel konulardan biriydi bu. Veritabanı tablolarından sınıflar oluşturma ve bunları kullanma, yani Linq To Sql Classes.
Veritabanı kullanan uygulamalar geliştirdiğimiz zaman,  veritabanındaki her tablo için yazılım tarafında bir mapping sınıfı oluştumak hem zaman alır hem de oldukça sıkıcı bir iştir. Microsoft bu soruna, .Net Framework 3.0 ile birlikte gelen Linq ile bir çözüm bulmuş. Aslında Linq, List gibi veri yapılarında, SQL benzeri sorguların çalıştırılabilmesini sağlayan .Net Extention'ı. Fakat yetenekleri bununla sınırlı değilmiş, veritabanı tablolarından otomatik olarak sınıflar üretip mapping işlemi de yapıyormuş.

Nasıl Mı?
Bunu anlatabilmek için çok basit bir örnek hazırladım. Çalıştırabilmek için; SQL Server 2005 veya üstü, .Net Framework 3 veya üstü ve de Visual Studio 2008 veya 2010 sisteminizde yüklü olmalı . Ben Visual Studio 2010 ve SQL Server 2008 kullandım.


Öncelikle programın kullanacağı veritabanını ve tablolarını yaratacağız. Sql Server Management Studio'yu açıp Data isimli bir veritabanı (çok yaratıcı :P)















ve Kisiler isimli bir tablo oluşturuyoruz. Tablonun içeriği şu şekilde olacak;









Veritabanını ve tabloyu oluşturduktan sonra Visual Studio' da yeni bir Windows Forms uygulaması(Web uygulaması da olabilir) açıyoruz. Ben bir sonraki yazımda da kullanacağım için projenin adını ReflectionOrnek yaptım. Daha sonra projenin adına sağ tıklayıp Add -> New Item'ı seçiyoruz.












Açılan pencerede Data bölümünde "LINQ To SQL Classes" 'ı seçiyoruz. Bu projemize dbml uzantılı dosyalar ekleyecek.











DBML dosyası eklendikten sonra, Visual Studio' da View menüsünden Server Explorer'i açıyoruz ve buradan Connect To Database'e tıklıyoruz. Daha önce yarattığımız veritabanını seçiyoruz.































Bağlantı kurulunca Server Explorer penceresinden, veritabanını seçiyoruz ve Kisiler tablosunu, açık olan DataClasses1.dbml 'in üzerine sürüklüyoruz. Böylece veritabanı tablosuna karşılık gelen Kisiler sınıfı otomatik olarak oluşturuluyor.(DataClasses1.dbml içerisinde)











Daha sonra formun kod kısmına bir class değişkeni olarak şunu ekliyoruz;
DataClasses1DataContext LinqToSql = new DataClasses1DataContext();
Bunun sayesinde Linq sorgularını kullanarak LinqToSql.Kisilers tablosu aracılığı ile veritabanından direkt olarak kişileri çekebiliyoruz. Buradaki "Kisilers" otomatik olarak oluşturulmuş bir yazılım sınıfı, veritabanındaki Kişiler tablosuna karşılık geliyor. (Kisiler tipinde nesneler tutan bir liste olarak da düşünülebilir.)

Son olarak forma bir buton ekliyoruz ve içini aşağıdaki gibi dolduruyoruz. Kişi bilgileri hiç sql kullanmadan, sınıf yaratmadan veritabanından okunuyor ve bir MessageBox'ta ad ve soyad gösteriliyor.












Projeyi buradan indirebilirsiniz, appconfig dosyasındaki veritabanı bağlantı ayarlarını kendinize göre değiştirmeyi unutmayın.

Hiç yorum yok:

Yorum Gönder