LINQ to SQL’e GiriÅŸ

21 Ocak 2009 tarihinde Ali TOPALOĞLU tarafından yazılmış.



ArkadaÅŸlar bu yazımızda LINQ2SQL’u genel olarak inceleyeceÄŸiz . LINQ2SQL Nedir? LINQ2SQL ”Direk LINQ komutları ile veritabanına eriÅŸim saÄŸlayan Microsoft teknolojisi”dir. Bu yazımızda ben Visual Web Developer 2008 Express kullanacağım. Programı açıp yeni bir ASP.NET 3.5 web sitesi yaratarak iÅŸe baÅŸlayalım. Örnek boyunca ben kendi makinemde kurulu olan SQL2005 üzerindeki ”forum” veritabanını kullanacağım. Veritabanımın yapısını aÅŸağıdaki ÅŸema içerisinde inceleyebilirsiniz.

http://img49.imageshack.us/img49/8205/59718180mk9.png
Örnek veritabanı tasarımı.

Bu veritabanını temelinden yola çıkarak ASP.NET 3.5 sitemde LINQ2SQL kullanarak veriye ulaÅŸmaya çalışacağım. İlk olarak OluÅŸturduÄŸumuz projemize bir “LINQ2SQL Class” dosyası eklememiz gerekli. Bunu eklemek için “Solution Explorer” içerisindeki projeye saÄŸ tıklayarak “New Item” diyelim.

http://img206.imageshack.us/img206/6315/52167952oj8.png
Yeni bir DBML dosyası yaratıyoruz.

Dosyayı projemize eklediÄŸimiz takdirde, karşımıza farklı bir arayüz gelecektir. Bir sonraki adımda Visual Studio içerisindeki “Database Explorer” panelinden SQL sunucunuza ve veritabanınıza baÄŸlanmanız gerekiyor. İşin bu kısmı Visual Studio 2005′den pek farklı deÄŸil. BaÄŸlantıyı saÄŸladıktan sonra veritabanınızdaki istediÄŸiniz tabloları sürükle&bırak tekniÄŸi ile orta pencereye, yani DBML dosyasına aktarabilirsiniz.

http://img520.imageshack.us/img520/2245/93882879ef4.png
Veritabanından DBML dosyasına yolculuk.

Artık DBML dosyasını kaydederek çıkabiliriz. EÄŸer isterseniz tabloların yanı sıra Store Procedure’lerinizi de DBML dosyalarına ekleme ÅŸansınız var. Ekledikten sonra ne olduÄŸuna ve ne olacağına gelin beraber bir bakalım.

Projemize ait default.aspx dosyasının Code-Behind sayfasına geçerek kodumuzu yazmaya başlayalım.

Dim datalarim As New DataClassesDataContext

Yukarıdaki satır ile tanımlamış olduğumuz değişkenimiz, bizim DBML dosyamızdaki LINQ nesnelerine ulaşmamızı sağlayacak ve böylelikle kolayca veritabanından istekte bulunabileceğiz. Gelin hemen aşağıdaki kodumuzu kullanarak verimizi çekelim:

Dim SeciliMesajlar = From Secililer In datalarim.Mesajlars Where Secililer.MesajText.Contains(“DARON”)

Yukarıdaki kod size çok garip gelebilir. Bu kodumuzu inceleyelim ve deÄŸiÅŸkenlerine bir bakalım. SeciliMesajlar adında bir deÄŸiÅŸken oluÅŸturarak LINQ sorguma eÅŸitliyorum.  Aslında oluÅŸturduÄŸum SeciliMesajlar deÄŸiÅŸkeninin tipi System.LINQ.IQueryable(of Mesajlar) ÅŸeklinde. Yani özetle bana Mesajlar nesnesinin bir listesinden oluÅŸan ve LINQ ile sorgu gönderebileceÄŸim bir yapı döndürülecek. From dedikten sonra tamamen sallama bir tablo adı tanımlıyorum. Bunu SQL sorgularındaki tablolar gibi düşünebilirsiniz. Geçici bir süre için sadece sorgumda kullanılmak üzere bir tablo adı yaratıyorum. Bu tablonun bir önceki satırda yarattığım datalarim veri katmanından Mesajlar tablosundan veri alacağını belirtmek için In deyimini kullanıyorum. Bundan sonrası aslında artık SQL sorguları gibi. Where deyimini kullanarak “kafadan sallama” olarak oluÅŸturduÄŸum tablonun MesajText kolonunda “DARON” metni geçenlerin geri döndürülmesini saÄŸlamak üzere LINQ sorgumu düzenliyorum.

Bu sorgudan geri dönen SeciliMesajlar değişkenini direk DataSource olarak kullanabilirsiniz. Eğer sayfanıza bir GridView eklerseniz aşağıdaki gibi DataBind yapma şansınız olacaktır.

GridView1.DataSource = SeciliMesajlar

GridView1.DataBind()

Gördüğünüz gibi arkadaÅŸlar veritabanına eriÅŸim iÅŸte bu kadar kolaylaÅŸtırılmış durumda. Aslında eskiden LINQ2SQL’in yaptığı iÅŸi yapan harici araçlar kullanarak veritabanlarına göre otomatik ÅŸablonlar hazırlayarak ÅŸablonlar üzerinden veri katmanı kodları oluÅŸturabiliyorduk. Ancak hiçbiri LINQ’nun getirdiÄŸi esnekliÄŸe sahip olmuyordu ama konsept olarak aynı amaca hitap ettiklerinide söyleyebiliriz.

Peki arkaplanda neler oluyor?

İşimiz bu kadar kolay olmasına kolay, peki ya performans??? sorunuzu duyar gibiyim :) veya acaba bu sorgular direk SQL’de mi çalışıyor yoksa GridView’ın Paging özelliÄŸindeki gibi ASP.NET tüm veriyi SQL’den IIS’e alıp orada mı sorguluyor dediÄŸinizi :) Bende bu soruya cevap bulmak için SQL Management Studio’yu açarak Activity Monitor üzerinden sunucuya gönderilen sorgulardan birini yakaladım;

(@p0 nvarchar(7))

SELECT [t0].[MesajID], [t0].[MesajText], [t0].[MesajDate],

[t0].[LoginID], [t0].[KonuID], [t0].[IsHTML]

FROM [dbo].[Mesajlar] AS [t0]

WHERE [t0].[MesajText] LIKE @p0

Yazdığımız LINQ kodu yukarıdaki SQL koduna çevrilerek SQL sunucusuna gönderilmiş. Gerçektende inanılmaz değil mi :) Gerekli parametre tanımlanmış doğru sorgu oluşturulmuş ve birleştirilmiş. Daha ne isteyebilirz ki :)

Bana öyle geliyor ki artık SQL tarafında sorguları hazırlayıp projelerimi kopyala-yapıştır yapmaktan kurtulacağız :) Bu yazımızda sizlere basit olarak LINQ2SQL’dan bahsetmeye çalıştık. Umarım sizler için açıklayıcı olmuÅŸtur.

Katkılarından dolayı Daron YÖNDEM’e teÅŸekkürü bir borç bilirim.



   Bu yazı Ali TOPALOÄžLU tarafından EÄŸitim kategorisine eklenmiÅŸtir.
  etiket , , , , , olarak etiketlenmiÅŸtir.
  rss Bu yazı toplam  4.143 defa okunmuÅŸ.
  yazdir Buraya tıklayarak sayfayı yazıcıdan çıkartabilirsiniz.
  Yorum yapcam Yazıya yorum yapabilir, yapılan yorumları RSS 2.0 ile takip edebilirsiniz.
EkleBunu Sosyal Paylaþým Butonu


Bu yazıya 2 tane yorum yapılmış

  1. Alemist

    süper paylaşım tşk :)


  2. hosting

    Çok güzel olmuş. Teşekkür ederim..


Mesaj Yaz