Makale Özeti

LINQ To SQL, O/RM (Object Relational Mapping)’in .NET Framework ortamına uyarlanmış hali olarak düşünülebilir. Artık .Net Framework içinde ilişkisel bir veritabanını modelleyebileceğimiz sınıflar mevcut. Bu sınıflarla oluşturduğumuz model ile standart sorgulama işlemlerini gerçekleştirmek oldukça kolay. Veritabanı ile bağlantılı çalışan sınıfları oluşturmak aslında standart sınıf oluşturmaktan çok fazla farkılı değil. Aradaki tek fark sadece bu sınıflara ve bu sınıflara ait değişkenlere nitelik(attribute) tanımlaması yapmaktır.

Makale

LINQ TO SQL İle Standart Sorgu İşlemleri

LINQ To SQL, O/RM (Object Relational Mapping)’in .NET Framework ortamına uyarlanmış hali olarak düşünülebilir.
Artık .Net Framework içinde ilişkisel bir veritabanını modelleyebileceğimiz sınıflar mevcut.
Bu sınıflarla oluşturduğumuz model ile standart sorgulama işlemlerini gerçekleştirmek oldukça kolay.

Veritabanı ile bağlantılı  çalışan sınıfları oluşturmak aslında standart sınıf oluşturmaktan çok fazla farkılı değil.
Aradaki tek fark sadece bu sınıflara ve bu sınıflara ait değişkenlere nitelik(attribute) tanımlaması yapmaktır. 

Örneğimizde kullanmak üzere bir test veritabanı ve bu veritabanı içinde bir test tablosu yaratmakla işe başlayalım.

CREATE DATABASE LINQTest

GO

USE LINQTest

GO

CREATE TABLE Ogrenci

(

       OgrenciNo int Primary Key,

       OgrenciAd nvarchar(50) not null,

       OgrenciSoyad nvarchar(50) not null

)

Bu tabloya veri ekleyelim.

INSERT INTO Ogrenci(OgrenciNo,OgrenciAd, OgrenciSoyad)

VALUES(1,'Murat','Arslan')

GO

INSERT INTO Ogrenci(OgrenciNo,OgrenciAd, OgrenciSoyad)

VALUES(2,'Diler','Arslan')
GO

 

Tablomuz ve verilerimiz hazır. Artık işin kod tarafına geçebiliriz.

 

Linq TO SQL sınıflarını kullanabilmemiz için öncelikle “System.Data.Linq” referansını projemize eklemeliyiz.

 

linq1.jpg

 

Veritabanıyla ilişkili çalışacak sınıfımızı yaratmak için projeye yeni bir sınıf(class) daha ekleyelim.

 

linq2.jpg 

Linq TO SQL sınıflarımızı yaratacağımız bu kod sayfasına aşağıdaki 2 isim uzayını da eklersek kodlarımızı yazmaya başlayabiliriz.

 

using System.Data.Linq;

using System.Data.Linq.Mapping;

 

Veritabanında yarattığımız “Ogrenci” tablosuna bağlı çalışacak standart bir sınıf yaratarak devam edelim.

   

    class Ogrenci

    {

        public int OgrenciNo;

        public string OgrenciAd;

        public string OgrenciSoyad;

    }

 

Bu sınıfı Linq TO SQL’e uyarlamak için sınıf isminin üzerine “Table” niteliğini , ve sınıf değişkenlerinin üzerine ise “Column” niteliğini eklememiz gerekiyor.

 

    [Table (Name="Ogrenci")]

    class Ogrenci

    {

        [Column (IsPrimaryKey=true)]

        public int OgrenciNo;

        [Column]

        public string OgrenciAd;

        [Column]

        public string OgrenciSoyad;

    }

Veritabanındaki tabloyla ilişkilendireceğimiz sınıfımız hazır. Şimdi System.Data.Linq isim uzayında yer alan
DataContext sınıfından türeteceğimiz TextContext sınıfımızı oluşturacağız.

DataContext sınıfı ADO.Net’ten tanıdığımız SqlConnection’a benzer olarak veritabanıyla olan iletişimi sağlamakla görevlidir.
IDBConnection arayüzünden(interface) türemiş bir Connection nesnesiyle ya da bir connection string’le yaratılabilir.

Şimdi TestContext sınıfımıza veritabanındaki Ogrenci tablomuzu temsil edecek Table collection tipinde bir tanımlama eklemeliyiz.

    class TestContext : DataContext

    {

        public TestContext(string connectionString) : base(connectionString)

        {

        }

 

        public Table<Ogrenci> Ogrenciler;

       

    }

Veritabanındaki tablomuzu modellediğimiz sınıfımız hazır. Şimdi bu sınıfı kullanarak nasıl işlemler yapabileceğimizi görelim.

Program.cs sınıf dosyamızdaki Main() metodunun içine veritabanındaki tablomuzdan sorgu yapabileceğimiz bir kod parçası ekleyelim.
Kodumuzun çalışması için gerekli isim uzayını (
System.Data.Linq )kodumuza ekleyelim.

static void Main(string[] args)

{

    //TestContext sınıfımızdan bir connection string parametresi ile bir nesne yaratıyoruz.

    string connectionString = "data source=.;Integrated Security=true;"+

    "Initial Catalog=LINQTest;";

    TestContext context = new TestContext(connectionString);

 

    //Sorgulama yapmak için Ogrenci tablosunu alıyoruz

    Table<Ogrenci> ogrencilerTablosu = context.GetTable<Ogrenci>();

 

    //var tip belirtemeden değişken tanımlamızı sağlar

    var sorgu = from s in ogrencilerTablosu

                where s.OgrenciSoyad == "Arslan"

                select s;

    //sorgumuzun sonucu konsol ekranına yazdırıyoruz

    foreach (var ogrenci in sorgu)

    {

        Console.WriteLine("Numarası={0}, Adı={1}, Soyadı={2}", ogrenci.OgrenciNo ,  

        ogrenci.OgrenciAd , ogrenci.OgrenciSoyad );

    }

 

}

 

Uygulamamızı çalıştırdığımızda ekran görüntüsü aşağıdaki şekilde görüldüğü gibi olmalıdır.

 

linq3.jpg 

 

Veritabanı tablomuza veri eklemek istersek yazacağımız kod ise şu şekilde olacaktır.

 

static void Main(string[] args)

{

    string connectionString = "data source=.;Integrated Security=true;" +

"Initial Catalog=LINQTest;";

    TestContext context = new TestContext(connectionString);

 

    //Veritabanıyla eşleştirmek için oluşturduğumuz

    // sınıfımızdan bir öğrenci obje yaratıyoruz.

    Ogrenci ogrenci = new Ogrenci();

    //Objenin değerlerini atıyoruz.

    ogrenci.OgrenciNo = 3;

    ogrenci.OgrenciAd = "Derin";

    ogrenci.OgrenciSoyad = "Arslan";

 

    //TestContext'te tanımlamış olduğumuz table collection

    // tipindeki değişkenimize objeyi ekliyoruz

    context.Ogrenciler.Add(ogrenci);

   

    //TestContext sınıfımızdan değişiklikleri

    //kaydetmesini istiyoruz

    context.SubmitChanges();

}

 

 

SubmitChanges() metodunu çalıştırdığımızda LINQ otomatik olarak gerekli SQL cümlelerini oluşturur ve bu cümleleri veritabanı üzerinde çalıştırır.

Veritabanındaki tablomuza baktığımızda yeni kaydın eklenmiş olduğunu görebiliriz.

linq4.jpg

Bu makale üzerindeki uygulama Visual Studio .Net 2008 Beta 2 sürümü üzerinde geliştirilmiştir.
Visual Studio’nun bu son Beta sürümünü
http://go.microsoft.com/fwlink/?linkid=95600 den indirebilirsiniz.

Murat Arslan
murat.arslan@bilgedam.com

 

 

 

 

Ornek Uygulama