EntityFramework İşlemlerinde Mysql Stored Procedure Çalıştır

Kodla Büyü

togius

Süper Üye
Süper Üye
Mesajlar
1,726
Mysqlde stored procedure ne yazık ki -bu söylediğimi abartmıyorum- memlektte host hizmeti veren firmaların pek uzak oluğu bir konu aslında phpde kullaılsada kullana pek fazla yok sanırım.
 

Ekli dosyalar

  • EntityFramework İşlemlerinde Saklı Yordam Stored Procedure Çalıştırmak.rar
    38.7 KB · Görüntüleme: 33
Saklı yordamlar veritabanı işlemlerinin beklide olmazsa olmazı en basit tabirle veritabanı kısayollarıdır diyebiliriz. Günümüz internet hizmetleri her ne kadar artmış olsa da tüm sorgulama ve filtreleme işlemlerini veya en karmaşığından tutunda en kolayına kadar tüm karşılaştırma işlemlerini ve fonksiyon ve değimleri kod kısmına bırakmak yüksek ziyaretçi sayısına sahip sistemlerde çok büyük yükler getirir. Burada Hızır gibi imdadımıza stored procedure’ler koşmakta. Peki nedir bu stored procedureler ne gibi yararları var?
1. Parametre mantığı ile çalıştığından Sql Injection saldırılarına önlem olarak kullanılabilirler.
2. Sql Server tabanlı çalıştıkları için daha hızlı sonuç döndürürler.
3. Kodlarınızda bir düzen teşkil eder ve birden fazla kere kullanımlarda tekrar tekrar yazma gereği yoktur.
4. İstemci makinelerdeki iş yükünü azaltır ve performansı
5. arttırır (yazıldığı zaman aynı zamanda compile edildikleri için query optimizer tarafından optimize edilmiş en hızlı şekilde çalışır).
6. Sql cümleleri, Saklı Yordam’ lardan çok daha yavaş sonuç döndürür
7. Çok katlı mimariyi uygulamak isteğimiz projelerde faydalıdır.
8. Networkü (Ağ Trafiğini) azaltır.
9. Açık Sql cümleciklerine nazaran daha güvenlidir
10. Programlama deyimlerini içerebilirler. if, next, set vs.. programlama dillerindekine benzer özellikler sunar.
Ancak MySql projemizde 1 adet Stored Procedure Oluşturalım. Stored Procedure miz aşağıdaki gibi basit olacağı gibi daha kompleks olabilirder.
Kod:
DELIMITER //
CREATE DEFINER=` kullaniciadi `@`%` PROCEDURE `GetUyeler`(`paramkey` int, `paramuye` varchar(50),`parameposta` varchar(50),`paramfiltre` varchar(150))
BEGIN
	SELECT * FROM tuyeler ORDER BY adsoyad ASC;
END//
DELIMITER;
Veya daha kompleks
Kod:
DELIMITER //
CREATE DEFINER=`kullaniciadi`@`%` PROCEDURE `GetUyeler`(`paramkey` int, `paramuye` varchar(50),`parameposta` varchar(50),`paramfiltre` varchar(150))
BEGIN
	IF(paramkey>0) THEN
		SELECT * FROM tuyeler Where id=paramkey;	
	ELSEIF(LENGTH(paramuye)>0) THEN
		SELECT * FROM tuyeler Where uye=paramuye;
	ELSEIF(LENGTH(parameposta)>0) THEN
		SELECT * FROM tuyeler Where eposta=parameposta;
	ELSE
		if (LENGTH(paramfiltre)>0) THEN
				set @sorgu="SELECT * FROM tuyeler where ";
				set @sorgu=CONCAT(@sorgu,paramfiltre," ORDER BY adsoyad ASC");
				PREPARE	stmt from @sorgu;
				EXECUTE stmt;
		else
			SELECT * FROM tuyeler ORDER BY adsoyad ASC;
		end if;
	END IF;
END//
DELIMITER;

Bu storedprocuduremizi bir EntityFrameWork üzerinde nasıl kulacağız.
Modelimizde farenin sağ tuşuna bastıktan sonra Update From Database seçeneğini kullanarak yeni oluşturduğumuz stored procedure ü Add sekmesinden seçip Finish diyerek dahil edelim. Stored Proceduremiz Model Browserda Stored Procedureler sekmesi altında yer aldı. Proceduremizi seçtikten sonra Add Function Import dedikten sonra karşımıza bir pencere gelecek .
Buradaki

Function Import Name: Model içerisinde çağıracağımız isim.
Stored Procedure Name: Kullanacağımız saklı yordamın adı.
Returns a Collection Of:Metodun geriye ne tür bir değer döndürdüğü veya döndürmediği.
Entites ile bir tablo türüne dönüştürmesini siteyebiliriz. Veya Compex ile kendine has bir tablo türünde döndürdüğünü belirtebilirsiniz.



Kod:
using (var db = new balikesirEntities())
        {
            var uyeler = from uye in db.GetUyeleriTerstenSirala()
                         select uye;
            StringBuilder sb = new StringBuilder();
            foreach (var uye in uyeler)
            {
                sb.AppendFormat("{0}<br>", uye.adsoyad);
            }
        }
 
Geri
Üst