12, Nis 2023
Dapper Nedir?

Selamlar;

Bugün Micro Ormler içinde en hızlısından biri olan Dapper’ı bir Mvc projesi ile inceleyeceğiz. Aşağıda hızı ile ilgili performans testi gözükmektedir.

Genelde Orm araçları biraz hantal çalışır. Özellikle yoğun trafik alan portallarda pek de tercih edilmez. Ancak bu gibi durumlarda bir “Micro Orm” bir çok soruna çözüm olabilir. Örneğin “Dapper“sadece tek bir “Dll”dir. Çok hızlıdır. LightWeight dir. Yani, ne mapping yapmak için bir ara yüzü vardır ne de herhangi bir konfigurasyon dosyasına ihtiyaç duymaktadır. Kısaca basit ve çok hızlıdır. Ayrıca bize aynı entity framework’de olduğun gibi kolayca Query yazma olanağı sağlamaktadır. Bana en güven veren durumlardan biri de “Stack Overflow” geliştiricileri tarafından yazılmış olan bir Orm Tool’u olmasıdır.

Nuget’den aşağıdaki paket indirilerek kolaylıkla “Dapper” projeye eklenebilir.

Nuget’den aşağıdaki paket indirilerek kolaylıkla “Dapper” projeye eklenebilir.

Dapper

Dapper projeye eklendikten sonra referanslar kısmına bakıldığında, aşağıdaki dosyadan başka birşey gözükmemektedir:)

dapperRef

Şimdi gelin pocolarımızı yani Data Modellerimizi oluşturalım. Yorum ve Kategori sınıfları aşağıdaki gibi tanımlanır. Bu sınıflar “HaberContext” adındaki bir MsSql database’deki tablolara karşılık gelmektedir. Dapper’da işlem yapılacak DB’deki tabloların sınıf karşılıkları ilgili projede tek tek tanımlanmalıdır.

Mvc projesine aşağıdaki kütüpahaneler eklenir.

Web.config dosyasına tanımlanan “connection string” local bir makina için aşağıdaki gibidir.

Dapper’da öncelikle bir “SqlConnection” tanımlanmalıdır. Daha sonra aşağıdaki örnek de olduğu gibi ilgili connection içinde istenen “Query”ler çekilebilir. İlgili örnekte “Join” işlemleri yapılarak 2 farklı tablodan bilgi çekilebilir. Ayrıca 2 farklı sorgu ile birden fazla query result dönülebilir. Çoklu sorgu çekmek için Dapper’da “QueryMultiple()” methodu kullanılır. Ayrıca asenkron yapıyı da “Dapper” desteklemektedir. Dönen farklı query resultlar, herbir Query sonucu için “Read()” methodu çalıştırılarak sıra ile alınabilir. Örneğin aşağıdaki örnekte “Habers” ve “Kategoris” tablolarından ayrı ayrı sorgular çekilmiştir.

GetYorumByHaber: MsSql tarafında haber’e ait yorumları çekmek için yazılan procedure.

Dapper’da Procedure Desteği: Aşağıda görüldüğü gibi “GetYorumHaber” procedure ile girilen “HaberID” parametresine göre ilgili yorumlar asenkron olarak çekilmektedir. Ayrıca procedure’ün dönüş tipinin “<Yorum>” olduğu aşağıda görüldüğü gibi belirtilmiştir.

SaveCommand: Haber’e ait yorumun kaydedilmesi amacı ile yazılan procedure.

Procedure’e Dynamic Parameter Tanımlama: “Dynamic” parametre tanımı ile procedure’e yeni oluşturulan “Yorum” sınıfı parametre olarak atanır. “Parametre”‘ye atanan her bir değişkenin data tipi “DbType” ile  belirtildikten sonra “@” ile başlıyan procedure’deki adı ile ilgili isim atanır.”@Id” parametresi “OutPut” parametre olarak atanmıştır. Yeni oluşturulan yorum sınıfı “SaveCommand” procedure ile kaydedilmiş ve bu yeni “Yorum” kaydına ait ID değeri “parameter.Get<int>(‘@id’)” methodu ile çekilerek, yeni oluşturulan yorum sınıfının “id” değerine atanmıştır.

Dapper’da Insert: “Insert” cümleciği ile “Yorum” sınıfına ait propertyler “@” işareti ile başlıyan değişkenler ile tanımlanmış alanlara parametre olarak yeni oluşturulan yorum sınıfı(yrm3) atanmıştır. Son olarak “Select SCOPE_IDENTITY” ile insert edilen en son yorum datasının “@@identity” degeri yani “id” kolonu geri dönülür.

Böylece gerçekten çok hızlı olan Micro Orm Dapper’ı hep beraber inceledik. Pocoların tanımlanması ve yazılacak Queryler biraz daha zahmetli olmasına karşılık sadeliği ve performansı ile kesinlikle tercih edilebilir.

Geldik bir makalenin daha sonuna. Yeni bir makalede görüşmek üzere hoşçakalın.

Source: 

 

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir