Entity Framework ile Asenkron Generic Repository Yapısı

Merhaba Arkadaşlar,

İlk makalemden hepinize saygı ve selamlar 🙂

Yeri gelmişken kısa bir şekilde blog açma amacımdan bahsedeyim.Uzun zamandır aklımda olan fakat gerek okul gerek okul dışı projeler nedeniyle pek vakit ayırmaya vakit bulamadığım şeydi kendi bloğumu açıp bildiklerimi, yeni öğrendiklerimi veya hoşuma giden şeyleri sizlerle de paylaşmak.Ancak geç olsa da yavaş yavaş başlamayı uygun gördüm.Fırsat buldukça araştırıp edindiğim şeyleri paylaşmayı umuyorum.Lafı çok uzatmadan konuya başlıyayım.

Blogumun ilk postunda sizlerle entity framework generic repository kavramı ile proje kapsamında kullanacağımız tüm entity nesneleri için repositorylerimizde kullandğımız CRUD işlemlerinin tek bir generic repositoryde nasıl uyarlanacağını ve nasıl efektif bir şekilde kullanıp zaman kazanımını ve projedeki Data Access Layer v.s. gibi katmanları daha kullanışlı hale getirmeyi anlatmaya çalışacağım.

Belirtmekte fayda var benim oluşturacağım Generic Repository ile en temel DB işlemlerini ele alacağım siz projenizin uygunluğuna göre bu metodları zenginleştirebilirsiniz.

Öncelikle generic repository için aşağıdaki şekilde interface oluşturuyoruz.

Sonrasında generic repository classımızı oluşturup interfaceimizin implementasyonunu aşağıdaki şekilde yapıyoruz.

Generic repositoryi inherite ederken istenilen

“T” bizim üzerinde işlem yapmak istedğimiz entity nesnemizi “C”  ise Contextimizi temsil etmektedir.

Oluşturduğumuz abstract class içerisinde async olmayan tek bir metod dikkatinizi çekmiş olmalı.Bu metodumuzun kullanım amacı custom dinamik bir sorguyu parametre olarak alıp result olarak IQueryable ve T tipinde bir sonuç döndürmekte.  Bu kadar 🙂

Şimdi de oluşturduğumuz generic repositryimizi bir örnek üzerinde kullanmaya bakalım.Örneğin Product nesnemiz olduğunu ve bu nesnemiz üzerinde nasıl uyarlayacağımıza bakalım. “ProductRepository” adındaki repositoryimizi aşağıdaki gibi oluşturuyoruz.

Görüldüğü gibi ilk olarak contextimizi ve sonra entity nesnemizi girdik.Ve tüm Async CRUD metodlarına sahip bir “Productrepository” tasarlamış olduk.

İstenildiği takdirde hali hazırda var olan metodlarımıza ek olarak custom bir metodu (yani ürün nesnesi için harici işlem gerektiren esneklikleri  ürün stoğunda değişiklik yapmak gibi )”ProductRepository” içerisinde kullanmak için “base.Context” diyerek contextimize erişim sağlayabilir, gerekli işlemleri miras aldığımız repository içerisinde tanımlayabiliriz .

Bundan sonra tek yapmamız geren tasarladığımız repositoryi kullanacağımız katmanda (ServiceLayer v.s. ) gibi

şeklinde async kullanımını sağlamak.Bu kadar 🙂

Bir dahaki yazımda görüşmek dileğiyle…

 

Bir cevap bırakın
Son Yazılar