1 Mart 2014 Cumartesi

Linq to Sql

Merhabalar,
bu yazimizda Asp.Net ile Linq to sql kullanimini anlatmaya çalisacagiz.
(Sadece Asp.Net te degil diger .Net uygulamalarinda da bu yapiyi kullanabilirsiniz)

Öncelikle linq to sql nedir bundan bahsedelim.
Linq, program ve veri arasindaki iliskiyi baska bir boyuta tasiyan bir programlama metodolojisidir ve bir programalama arayüzü sunar. Linq to sql ise Linq'in bir elemani olarak SQL server veritabanindaki tablolari sorgulama görevi vardir.
Asagidaki resimde LINQ mimarisi özet olarak yer almaktadır.

Linq Mimarisi



Linq to Sql, Microsoft’un Visual Studio ile birlikte sundugu bir ORM aracidir.
Veritabaninda tutulan nesneler temel CRUD islemleri ile islenir ve ORM araçlari program ile database arasindaki bu islemlerin daha rahat ve esnek yapilabilmesi için bir yapi sunar.
Kisaca bu islem asagidaki sekille ifade edilebilir.



Simdi yeni bir proje yapacagiz, projemizde personeller ve müdürler sahnesi üzerinden gidecegiz.
Her personelin bagli oldugu bir müdür ve bir müdürün ilgili oldugu personeller olacak.


Adimlari takip ederek ilerleyelim:
1) Sql server management studio yu açarak 'LinqDemoDB' isminde yeni bir database olusturalim.






















2) Veritabanimiza 'Mudur' isminde yeni bir tablo ekleyelim ve resimdeki özellikleri ekleyelim. id özelligini primary key yapalim ve column properties bölümünden Is Identity özelligini de Yes yapalim.

3) Veritabanimiza 'Personel' isminde yeni bir tablo ekleyelim ve resimdeki özellikleri ekleyelim. Burada yine bir primary key olan id özelligi var. Ayrica personelin hangi müdüre ait oldugunu gösteren birde 'mudurID' özelligi de ekledik.


Sql serverda yapacaklarimiz bu kadar, artik burdan sonra Visual studio ile devam edecegiz.

4) Visual Studioyu açalim ve File->New-> Web Site -> Asp.Net Empty Web Site seçerek 'LinqtoSqlDemo' ismi verelim.


5) Projeye sag tiklayip yeni bir WebForm ekleyelim ve Default.aspx adini verelim




6) Yine projeye sag tiklayip veritabani tablolarimizin bulundugu havuz yani
Linq To Sql Classes ekleyelim. Ekledikten sonra DataClasses.dbml isminde bos bir sekme gelecektir.



7) Sql servera baglanmamiz için sol taraftan Server Explorer bölümünden Connect to Database simgesine tiklayalim ve açilan Add New Connection bölümünde server name ve database name'leri girelim.



8) Baglantimizi sagladiktan sonra tablolarimiz resimdeki gibi gözükecektir.
Bu tablolari DataClasses.dbml sayfasina sürükleyip birakalim.

9) Tablolarimizin arasinda OneToMany iliski oldugundan bir association eklememiz
gerekiyor. Sürükleyip biraktigimiz 'Mudur' tablosuna sag tiklayip Add->Association
diyelim. Parent classimizi 'Mudur' ve child classimizi 'Personel' seçelim.
Association properties'leri de resimdeki gibi yapalim. Iliskiyi kuracak olan özellikler
id ve mudurID lerdir.



Yaptiklarimizi kaydedelim ve kodlamaya geçelim.
Web sayfasinin ön yüzünü burada anlatmayacagim, burada sadece CRUD islemlerinin
C# kodunu anlatacagim.
DataClassesDataContext sinifi bütün tablolarimizin bulundugu siniftir. Bu siniftan
bir örnek olusturalim.
DataClassesDataContext ctx = new DataClassesDataContext();
Tablolarimiza ctx.Mudurs veya ctx.Personels diye erisebiliriz.
Ekleme yaparken InsertOnSubmit() methodunu kullanacagiz, bu methodla nesnemiz
veritabanina kaydedilmez sadece geçici hafizada tutulur.
Geçici hafizadaki nesneleri kaydetmek için SubmitChanges() metodu kullanilir.
Bu metodu 'degisiklikleri kaydet' butonu gibi düsünebilirsiniz.

Örnek bir ekleme islemi asagidaki gibidir:
public void insertMudur()
    {
        Mudur m = new Mudur();
        m.isim = "Hakan";
        DataClassesDataContext ctx = new DataClassesDataContext();
        ctx.Mudurs.InsertOnSubmit(m);
        ctx.SubmitChanges();
        Personel p = new Personel();
        p.isim = "Onur";
        p.Mudur = m;
        ctx.Personels.InsertOnSubmit(p);
        ctx.SubmitChanges();
    }
Burada bir müdür nesnesi ve bir personel nesnesi olusturduk, daha önceden kurdugumuz
associationdan faydalanarak p.Mudur = m; diyerek kolaylikla one to many iliski
kurabiliriz.

Okuma:
public void select()
    {
        DataClassesDataContext ctx = new DataClassesDataContext();
        List<Mudur> mudurler = ctx.Mudurs.ToList();
    }

Güncelleme:
Bir satirlik linq sorgusu ile ilgili kayiti getirebiliriz. Ilgili degisiklikleri
yaptiktan sonra SubmitChanges() metodu ile degisiklikleri kaydedebiliriz.
public void update()
    {
        DataClassesDataContext ctx = new DataClassesDataContext();
        var mm = (from i in ctx.Mudurs where i.isim == "Hakan" select i).SingleOrDefault();
        mm.isim = "Hakmayan";
        ctx.SubmitChanges();
    }

Silme:
public void delete()
    {
        DataClassesDataContext ctx = new DataClassesDataContext();
        var mm = (from i in ctx.Mudurs where i.isim == "Hakan" select i).SingleOrDefault();
        ctx.Mudurs.DeleteOnSubmit(mm);
    }

Görüldügü gibi linq to sql kullanimi gayet basit ve zahmetsiz, zaten karmasik kodlarin
oldugu büyük projelerde bide klasik yöntem veritabani baglantilari da olunca isin isinden
çikilmaz oluyor. Linq to sql burada devreye giriyor ve biz yazilimcilarin isini kolaylastiriyor.
Umarim anlasilir bir sekilde anlatmisimdir ve sizlere faydam olmustur.
Bu konuyla ilgili bir sikintiniz olursa kemalduran@outlook.com adresinden
bana ulasabilirsiniz. Elimden geldigince yardimci olmaya çalisacagim.

Görüşmek üzere...
Kemal Duran

Hiç yorum yok:

Yorum Gönder