
Bildiğiniz
gibi LINQ adını verdiğimiz dile entegre sorgularla artık .NET ortamında
koleksiyon tabanlı nesneleri sorgulayabiliyoruz. Buradaki
sorgulamaların temel amacı normalde foreach döngüleri, if-else kontrol
yapılarıyla yapabildiğimiz uzun ve karmaşık işlemleri tıpkı T-SQL'de
olduğu gibi sade Select sorguları yazarak daha basit hale getirmektir.
LINQ'in asıl çıkış noktası ise uygulama içerisinde büyük ve karmaşık
olan veri nesnelerini (entity nesnelerini) kolay ve pratik şekilde
sorgulanabilmesini sağlamak ve büyük çaplı projelerde yazılımcıların en
büyük yüklerinden birisini hafifletmektir.
LINQ to SQL ile ilgili olarak en çok sorulan sorulardan birisi de Insert, Update ve Delete
işlemlerinin nasıl gerçekleştirilebileceği. LINQ ifadelerinde Insert,
Update ve Delete gibi anahtar kelimelerle sorgular yazılamadığını
söylemeye gerek yok sanırım:) Dolayısıyla LINQ to SQL'de amaç veri
nesneleriyle çalışmak ise bir şekilde bu tip işlemleri de
gerçekleştirebilmek gerekecektir. LINQ to SQL Classes (.dbml) dosyaları veritabanında yer alan veri nesnelerini doğrudan uygulamamıza class'lar olarak aktarmamızı sağlamaktadır. Örneğin Northwind veritabanındaki Product tablosunu uygulamamızda veri class'ı olarak oluşturduğumuzda DataContext nesnesinin içerisindeki Products
özelliği(property) Products tablosundaki ürünleri koleksiyon olarak
döndürecektir. İşte bu property'nin bazı metotları bizim Insert, Update
ve Delete gibi işlemleri gerçekleştirebilmemizi sağlayacaktır. Bu
metotlardan;
- InsertOnSubmit, Insert işlemini
- DeleteOnSubmit, Delete işlemini
gerçekleştirebilmektedir.
Peki Update işlemi nerede? Update işlemini ise LINQ sorgusu sonucundan
gelen kayıt veya kayıtların değerlerini değiştirerek
gerçekleştirebileceğiz. Buradaki her üç işleminde sonuçlarının
veritabanına aktarılabilmesi için DataContext nesnesinin SubmitChanges
isimli metodunun çalıştırılması yeterli olacaktır. Aşağıdaki kod
parçalarında LINQ to SQL'de veri ekleme, silme ve güncelleme
işlemlerinin nasıl yapılabileceği görülmektedir. Kodlarda yer alan northWind adındaki nesne DataContext nesnemizdir.
Product eklenecekUrun = new Product() { ProductName = "Acer Aspire 5100", UnitPrice = 1290, UnitsInStock = 15, CategoryID = 9 };
northWind.Products.InsertOnSubmit(eklenecekUrun); // Eklenecekler listesine yeni bir ürün eklendi
Product guncellenecekUrun = northWind.Products.First(u => u.ProductID == 69);
guncellenecekUrun.ProductName = "HP Pavilion 3355"; // Seçilen ürünün ProductName özelliği değiştirildi
Product silinecekUrun = northWind.Products.First(u => u.ProductID == 79);
northWind.Products.DeleteOnSubmit(silinecekUrun); // Seçilen ürünü silinecekler listesine at
northWind.SubmitChanges(); // Yukarıda yapılan güncellemeler veritabanına gönderildi