Merhaba arkadaşlar,
Geçen haftaki konumuz olan Entity Framework Kalıtım ile birlikte Entity Framework'e ait advance konu başlıklarından bahsetmeye başlamıştık. Bu hafta ise hem Entity Framework konuları arasında hemde Sql işlemlerinde önemli rol oynayan Stored Procedure konusundan bahsetmeye çalışacağım.
Stored Procedure nedir? Hangi zamanlarda kullanılır? İsterseniz ilk önce bu soruları cevaplayarak bu haftaki konumuza başlayalım. Stored Procedure Türkçe karşılığı ile Saklı Yordam veya Saklı Prosedür olarak karşımıza çıkar. Genellikle büyük projelerde kullanılması gereken performans açısından büyük faydaya sahip bir T-Sql ifadesidir. Performans artışını nasıl sağlıyor peki? Stored Procedure veritabanımızda tutulan ve bir kez execute edildikten sonra bir daha execute işlemine gerek kalmadan yani tekrar veritabanı sorgusu yapmaksızın istenilen bilgileri getirebilen ifadelerdir. Bu cümleden de anlaşılabileceği gibi bir uygulama katmanı değil veritabanı katmanı ifadeleridirler. Stored Procedurler ne zaman kullanılmalıdırlar? Yazımızın başında belirtiğim gibi genellikle büyük çaplı projelerde performans artışını sağlamak amacıyla kullanılırlar. Büyük bir veritabanına sahip bir proje düşünelim. Uygulama katmanında veritabanında aynı Sql sorgusunu birden fazla kullandığımızı varsayalım. Her ne kadar daha önce kullanılmış bir sorgu olsa bile bu Sql sorguları tekrar kullanmak istediğimizde tekrar veritabanına gidip aynı cevabı döndürecektir. Oysa Stored Procedure veritabanı serverlarında tutulduğu için hem çok hızlı çalışacaktır hemde bir kere kullanıldıktan sonra tekrar veritabanından sorgu yapmaksızın bir sonuç verecektir. Ayrıca Stored Procedurelar parametre alabildikleri için benzer sorgular içinde kullanılabilirler. Buradan da anlaşılabileceği gibi hızın çok önemli olduğu büyük projelerde kullanılması tercih edilir.
Stored Procedure Entity Framework ile nasıl kullanılır şimdide bundan bahsedelim isterseniz. Veritabanımız geçen haftalarda kullandığımız NorthWind olacak. Entity Framework ile birlikte kullanmak için bir Stored Procedure yazmamız gerekecek. Bunun için MS Sql 2008' i açıyoruz. NorthWind veritabanını import ediyoruz ve Stored Procedure yazmaya başlıyoruz.
Yukarıdaki Sql Queryi yazıyoruz. Yazıdığımız Stored Procedure parametre olarak bir id alıyor. Daha sonra dışarıdan aldığımız integer tipindeki bu id ile [Products] tablosundaki CategoryID'ye eşit olan ürünlerin ProductID, ProductName attributelerini alıyoruz. Ayrıca Suppliers tablosu ile Join yaparak da Suppliers tablosuna ait olan Country özelliğini kullanıyoruz. Tabi ki bunun içinde Products tablosundan seçtiğimiz ürünlerin SupplierIDleri ile Suppliers tablosundaki Join yaptığımız sağlayıcılara ait SupplierIDleri eşit olması gerekiyor. Bu eşitliği de yaptıktan sonra artık Stored Proceduremiz hazır. Testini yapmak için Stored Proceduremize id olarak 2 atarak çalıştırıyoruz. Çıkan sonuç yukarıdaki gibi olacaktır.
Stored Procedure yazımını tamamladıktan sonra şimdi Visual Studio kullanarak yapacağımız işlemlere başlayabiliriz. Data model oluşturma işlemininde bu zamana kadar hep Tables kısmını seçerek tamamlıyorduk. Fakat bu sefer Stored Procedure kullanacağımız için Stored Procedure seçeneğini de seçmeyi unutmuyoruz.
![]() |
Figür 2-VisualStudio Data Model Oluşturma |
Yukarıdaki gibi Stored Procedure seçeneğini seçtikten sonra artık kodlama işlemine başlayabiliriz. İlk önce Sql 2008 de yaptığımız listeleme işlemini Entity Framework kullanarak nasıl yapılacağına bakalım. Listele adında bir method oluşturalım. Stored Procedure oluşturur iken hatırlarsanız integer tipinde bir id alıyordu. Bizim methodunumuzda integer tipinde bir değişken alsın. Methodumuza gönderdiğimiz bu id değişkenine göre bizim methodumuzda bu değişkeni Stored Proceduremize göndersin ve ilgili sonuçlar dönsün.
![]() |
Figür 3 -Listele Methodu |
Listele methodunu yukarıdaki gibi yazıyoruz. Bu kodda ObjectResult tipinde MevcutUrunler listesi oluşturuyoruz. Bunu yaparken tabi ki daha önceden yazdığımızı Stored Proceduremizi kullanıyoruz. ObjectResult tipinde oluşturduğumuz listenin içine UrunleriGetir Stord Procedure sonucunda dönene tüm ürünleri atıyoruz. Methodumuzu çağırırken id değişkenini 2 olarak atadığımız zaman ekran çıktısı aşağıdaki gibi olması beklenir.
![]() |
Figür 4-Listele Methodu id=2 Ekran Çıktısı |
Peki listeleme işlemi dışında başla işlemler yapabilir miyiz Stored Procedure üzerinde? Elbette yapabiliriz. Güncelleme silme ve ekleme işlemleri de yapılabilir. Eklemeyi göstermek için bir örnek yapalım. Yine aynı proje üzerinde eğer yeni bir ürünü Stored Proceduremize eklemek istersek aşağıdaki kodlama işlemini yapmamız gerekecektir.
![]() |
Figür 5 -Ekle Methodu |
Yukarıda görülen ekle methodu asıl olarak bildiğimiz veritabanına ekleme işlemine benzemektedir. Fakat burada farklı olan kısım ise AddObject(proc) kısmıdır. Burada direkt olarak veritabanına ekleme değilde Stored Proceduremize ekleme yapmamızı sağlayan kısım AddObject()'dir.
Stored Procedure kısmında ekleme ve listeleme işlemini anlattıktan sonra bu haftaki yazımın sonuna geliyorum. Umarım Stored Procedure hakkında ve Entity Frameworkteki kullanımında verdiğim bilgiler faydalı olmuştur. Bir sonraki yazımda görüşmek dileğiyle...
Stored Procedure kısmında ekleme ve listeleme işlemini anlattıktan sonra bu haftaki yazımın sonuna geliyorum. Umarım Stored Procedure hakkında ve Entity Frameworkteki kullanımında verdiğim bilgiler faydalı olmuştur. Bir sonraki yazımda görüşmek dileğiyle...
Hiç yorum yok:
Yorum Gönder