Micro ORM Dapper Kullanımı

Micro ORM Dapper Kullanımı

Entity Framework ORM kullanmak günümüzde her ne kadar çok tercih edilsede uygulama Hostinge yüklendiğinde çok yavaş çalışmaktadır. Özellikle paylaşımlı bir hosting kullanıyorsanız sitenin ilk açılışı oldukça yavaş olmaktadır. Entity Framework de ilk sorgu oldukça yavaş gelmekte olup, daha sonraki sorgular normal çalışmaktadır. ADO net hızlı çalışmakta ancak kullanımı oldukça uğraştırmakta ve vakit alıcıdır.

İşte bu noktada en iyi çözümlerden biri Stack Overflow tarafından geliştirilen Micro ORM Dapper kullanmaktır. Micro ORM Dapper performans benchmarking karşılaştırma sonuçları oldukça iyidir. Aşağıdaki karşılaştırma oldukça çarpıcıdır.

Hand coded ADO (using a SqlDataReader)  : 47 ms

Micro ORM Dapper (Execute query)            : 49 ms

Entity Framework (Execute query)             : 631 ms 

Micro ORM Dapper kullanmak için öncelikle Nuget Package Manager sitesinden Dapper indirilir.

Install-Package Dapper 

//MS SQL veri tabanı bağlantısı için Model/DBContext class tanımı

using Dapper;
using System.Data.Common;
using System.Data.SqlClient;

public class DBContext
{
   public static DbConnection GetOpenConnection()
  {
    var connection = new SqlConnection("Server=.;Database=Deneme; Trusted_connection=true;");
     //var connection = new SqlConnection("Server=111.111;Database=Deneme;User=Kullanici;pwd=Sifre");
    connection.Open();
    return connection;
   }
}

//Gallery Model 

namespace DapperOrnek.Models
{
  public class Gallery
  {
    public int Id { get; set; }
    public String Title { get; set; }
    public String Description { get; set; }
    public String FileUrl { get; set; }

  }
}

//Select işlemi

using DapperOrnek.Models;
using Dapper;

public ActionResult Index()
{
   using (var connection = DBContext.GetOpenConnection())
   {
      var galeri= connection.Query<Gallery>(@"SELECT * FROM Gallery").ToList();
      return View(galeri);
   }
} 

//Parametre kullanmak

public ActionResult Index(string id)

{
   using (var connection = DBContext.GetOpenConnection())
   {
      var galeri= connection.Query<Gallery>(@"SELECT * FROM Gallery Where State=1 AND Title=@Id",new { id = id }).ToList();
      return View(galeri);
   }
} 

//Insert işlemi 

[HttpPost]
public ActionResult Index(Contact contact)
{

   using (var connection = DBContext.GetOpenConnection())
   {
      contact.Tarih = DateTime.Now;
      var sqlQuery = @"INSERT INTO Contact(Name,EMail,Phone,Subject,Message,Date)
                                                 VALUES (@AdSoyad,@Mail,@Telefon,@Konu,@Mesaj,@Tarih)";
      connection.Execute(sqlQuery, contact);
   }

} 

//Delete İşlemi

public JsonResult Sil(int id)
{
   using (var connection = DBContext.GetOpenConnection())
   {
      var sqlQuery = @"DELETE Gallery WHERE Id = @id";
      connection.Execute(sqlQuery, new { id = id });
   }
   return Json("");
} 

//Scalar sonuç sorgusu (tek bir sonuç sorgusu)

public ActionResult Count()
{
   using (var connection = DBContext.GetOpenConnection())
   {
      int sayi = connection.Query<int>("SELECT Count(*) AS SAYI FROM Table).Single();
      ViewBag.Sayi = sayi;
      return View();
   }
}


İlgili Yazılar