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();
}
}