Bu yazımda Stored Procedure yani saklı yordam ile Entitiy Framework nasıl çalışacak bunu anlatmaya çalışacağım.
Öncelikle Stored Procedure oluşturalım. Ben burada birden fazla tablodan kayıt çeken komplex bir yapı oluşturdum ki ara sınıf yaratılmasınıda burada görelim.
CREATE PROCEDURE DokumanArama
@DokumanTipi uniqueidentifier = null,
@Etiket nvarchar(300)=null,
@KullaniciGurubu int = null,
@Yayinda bit = null,
@AdSoyad nvarchar(250)=null,
@TarihBaslangic DateTime = null,
@TarihBitis DateTime = null
AS
SELECT Dokuman.*, DokumanTip.Ad, Yonetim.AdSoyad, Yonetim.KullaniciAdi, Yonetim.Sifre, Yonetim.EPosta, Yonetim.KayitTarihi, Yonetim.Aktif FROM Dokuman INNER JOIN DokumanTip ON Dokuman.DokumanTipiID = DokumanTip.ID INNER JOIN Yonetim ON Dokuman.EkleyenID = Yonetim.ID
WHERE
(Dokuman.DokumanTipiID = ISNULL(@DokumanTipi,DokumanTipiID)) OR
(Dokuman.ID = (SELECT EtiketDokuman.DokumanID FROM EtiketDokuman INNER JOIN Etiketler ON EtiketDokuman.EtiketID = Etiketler.ID WHERE (Etiketler.Etiket LIKE '%' + ISNULL(@Etiket, Etiketler.Etiket) + '%'))) OR
(Dokuman.KullaniciGurubu = ISNULL(@KullaniciGurubu, Dokuman.KullaniciGurubu)) OR
(Yonetim.AdSoyad LIKE '%'+ ISNULL (@AdSoyad,AdSoyad)+'%') OR
(Dokuman.Yayindami = ISNULL(@Yayinda, Dokuman.Yayindami)) OR
(Dokuman.EklenmeTarih BETWEEN ISNULL(@TarihBaslangic, Dokuman.EklenmeTarih) AND ISNULL(@TarihBitis, Dokuman.EklenmeTarih))
Yukarıda görüldüğü üzere stored prosedurum hem birden fazla değer alıp değeri null olanları koşul sorgumuza eklemiyor hemde birden fazla tablo ile çalışıp geriye birden fazla tablo değeri döndürüyor. Bunu bir dataset e aktarmak yerine bir genericlist e aktarmak istiyoruz.
Önce yaratığımız procedurü Entity Dosyamıza ekleyelim.
Sırası ile aşağıdaki resimleri takip edelim.
Öncelikle UpdateModelFromDataBase seçeneğini tıklayarak SP seçeceğimiz ekrana geçiyoruz.

Sonrasında SP ümüzü seçip Entity Data Modele ekliyoruz ki programın bu SP den haberi olsun.
Şu anda SP miz EDM (entity data model) içerisine eklendi. Artık sistemin bu SP den haber var. Şimdi bunu tanımlayalım.
Add seçeneği altından Funtion İmport diyerek SP mizi kullanıma dahil ediyoruz.
Ve son olarakda SP mize özel bir isim veriyoruz. Eğer SP miz var olan Entity Class lardan birini kullanmakta ise seçeneklerden dönüş tipine (Return a Collection of) kullanacağı hazır EC lerden birini seçebiliriz. Ancak buraa olduğu gibi birden fazla tablo seçimi söz konusu ise hazır sınıflar işimize yaramaz ve bizim yeni bir tip türetmemiz gerekir. Burada da bu işlemi yapıyoruz.
Evet şimdi sıra geldi bu SP mizi c# da çağırmaya.
Yani yaratığımız sınıf olan "Dokuman_Arama_Result" bizim dönüş tipimiz olacaktır.
public List
RetriveAllWithParameters(Guid? DokumanTipi, string Etiket, int? KullaniciGurubu, bool? Yayinda, string AdSoyad, DateTime? TarihBaslangic, DateTime? TarihBitis)
{
try
{
List List_Dokuman_Arama_Result = new List();
using (BilgiBankasiEntities bbe = new BilgiBankasiEntities())
{
List_Dokuman_Arama_Result = bbe.Dokuman_Arama(DokumanTipi, Etiket, KullaniciGurubu, Yayinda,
AdSoyad, TarihBaslangic, TarihBitis).ToList();
}
return List_Dokuman_Arama_Result;
}
catch (Exception)
{
return null;
}
}
Yukarıda yazan fonksiyon ile SP mize erişebilir, geriye Generic tipinde bir list döndürüp nesne tabalı işlemlerde kullanabilriz
Bu yazımın burada sonuna geliyorum. Umarım açıklayıcı ve faydalı bir yazı olmuştur.
Etiketler: Entitiy Framework, Stored Procedure, Stored Procedurede null kullanımı