Dapper Nedir? Nasıl Kullanılır ?
By: Kağan Saygın
Tags: Orm, Micro Orm, Dapper, Net Core

Dapper Kullanımı

Örneğimizde efsane Northwind veritabanını kullanacağız.

Models adında bir klasör oluşturuyoruz ve altına ürünlerimizin modeli olacak Product adında sınıf oluşturuyoruz.

public class Product

{

public int ProductId { get; set; }

public string ProductName { get; set; }

public int SupplierId { get; set; }

public int CategoryId { get; set; }

public string QuantityPerUnit { get; set; }

public decimal UnitPrice { get; set; }

public int UnitsInStock { get; set; }

public int UnitsOnOrder { get; set; }

public int ReorderLevel { get; set; }

public bool Discontinued { get; set; }

}

Veritabanı bağlantımız için appsettings.json içerisine connection stringimizi ekliyoruz.

{

"Logging": {

"LogLevel": {

"Default": "Information",

"Microsoft": "Warning",

"Microsoft.Hosting.Lifetime": "Information"

}

},

"AllowedHosts": "*",

"ConnectionStrings": {

"DefaultConnection": "Server= ;Database= ;User Id= ;Password= ;"

}

}

Controllers klasöründe ProductController oluşturuyoruz.

using Dapper;

using DapperExamples.Models;

using Microsoft.AspNetCore.Mvc;

using Microsoft.Extensions.Configuration;

using System.Data;

using System.Data.SqlClient;

using System.Linq; namespace DapperExamples.Controllers

{

[Route("api/[controller]")]

[ApiController]

public class ProductController : ControllerBase

{

//appsettings içerisindeki connection stringimizi alıyoruz.

private readonly IConfiguration _configuration;

private string conn; public ProductController(IConfiguration configuration)

{

_configuration = configuration;

conn = configuration.GetConnectionString("SqlConnection");

} [HttpGet("getall")]

public IActionResult GetAll()

{

using (IDbConnection cnn = new SqlConnection(conn))

{

string sqlSelectProducts = "SELECT ProductId, ProductName, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel FROM Products";

var result = cnn.Query<Product>(sqlSelectProducts).ToList();

return Ok(result);

}

return BadRequest();

}

}

}

Şimdi projemizi çalıştıralım ve Postman üzerinden bir test edelim.

Gördüğünüz gibi Dapper üzerinden Sql select sorgumuzu çalıştırdık ve ürünlerimizi listeledik. Eğer kodları yazdığınızda hata alıyorsanız System.Data.SqlClient ekli olmayabilir. Nugetten yükleyebilirsiz.

Dapper ile Veri Ekleme

Kullanıma geçmeden önce önemli bir hatırlatma yapmak isterim. Dapper kullanırken sql sorgularının saf halini yazıyoruz bu da bize SQL INJECTION zafiyetini oluşturacaktır, sorgularımızı parametreli olarak yazmalıyız.

Insert Sorgumuz

string sqlAddProducts = "INSERT INTO Products (ProductName,SupplierID,CategoryID,QuantityPerUnit,UnitPrice,UnitsInStock,UnitsOnOrder,ReorderLevel,Discontinued) VALUES (@ProductName,@SupplierID,@CategoryID,@QuantityPerUnit,@UnitPrice,@UnitsInStock,@UnitsOnOrder,@ReorderLevel,@Discontinued)"; //Burada sorgumuzu parametreleri ile çalıştırıyoruz.

var result = cnn.Execute(sqlAddProducts, new

{

ProductName = product.ProductName,

SupplierID = product.SupplierId,

CategoryID = product.CategoryId,

QuantityPerUnit = product.QuantityPerUnit,

UnitPrice = product.UnitPrice,

UnitsInStock = product.UnitsInStock,

UnitsOnOrder = product.UnitsOnOrder,

ReorderLevel = product.ReorderLevel,

Discontinued = product.Discontinued

});

Kodlarımızı şu şekilde toparlıyoruz.



public IActionResult Add(Product product)

{

using (IDbConnection cnn = new SqlConnection(conn))

{

string sqlAddProducts = "INSERT INTO Products (ProductName,SupplierID,CategoryID,QuantityPerUnit,UnitPrice,UnitsInStock,UnitsOnOrder,ReorderLevel,Discontinued) VALUES (@SupplierID,@CategoryID,@QuantityPerUnit,@UnitPrice,@UnitsInStock,@UnitsOnOrder,@ReorderLevel, [HttpPost("add")]public IActionResult Add(Product product)using (IDbConnection cnn = new SqlConnection(conn))string sqlAddProducts = "INSERT INTO Products (ProductName,SupplierID,CategoryID,QuantityPerUnit,UnitPrice,UnitsInStock,UnitsOnOrder,ReorderLevel,Discontinued) VALUES ( @ProductName @Discontinued )"; //Burada sorgumuzu parametreleri ile çalıştırıyoruz.

var result = cnn.Execute(sqlAddProducts, new

{

ProductName = product.ProductName,

SupplierID = product.SupplierId,

CategoryID = product.CategoryId,

QuantityPerUnit = product.QuantityPerUnit,

UnitPrice = product.UnitPrice,

UnitsInStock = product.UnitsInStock,

UnitsOnOrder = product.UnitsOnOrder,

ReorderLevel = product.ReorderLevel,

Discontinued = product.Discontinued

})

return Ok("Ürün Eklendi");

}

return BadRequest();

}

Projemizi çalıştırıp postman ile test edelim.

Ürün Eklendi