Introduction
ASP.NET Core is a powerful framework for building web applications, and "Dapper" is a popular micro ORM (Object-Relational Mapping) that works well with ASP.NET Core for database operations. Dapper provides a simple way to interact with databases using raw SQL queries while mapping the results to objects.
Setting Up Dapper in ASP.NET Core
- Create an ASP.NET Core Project: Use Visual Studio or the .NET CLI to create a new ASP.NET Core project.
- Install Dapper: You can add Dapper to your project using NuGet Package Manager.
dotnet add package Dapper - Set Up Database Connection: Configure a database connection in your
appsettings.jsonfile."ConnectionStrings": { "DefaultConnection": "YourDatabaseConnectionString" }
Create Model
namespace APIDevelopmentUsingDapper.Model
{
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Category { get; set; }
public string CategoryName { get; set; }
public string CategoryDescription { get; set; }
public string CategoryCategory { get; set; }
public string CategoryCategoryName { get; set;}
}
}
Create IDapperDbConnection
using System.Data;
namespace APIDevelopmentUsingDapper.Interfaces
{
public interface IDapperDbConnection
{
public IDbConnection CreateConnection();
}
}
Create Dapper Service Connection
using APIDevelopmentUsingDapper.Interfaces;
using Microsoft.Data.SqlClient;
using System.Data;
namespace APIDevelopmentUsingDapper.DapperDbConnections
{
public class DapperDbConnection: IDapperDbConnection
{
public read-only string _connectionString;
public DapperDbConnection(IConfiguration configuration)
{
_connectionString = configuration.GetConnectionString("DefaultConnection");
}
public IDbConnection CreateConnection()
{
return new SqlConnection(_connectionString);
}
}
}
Create IProductRepository
using APIDevelopmentUsingDapper.Model;
namespace APIDevelopmentUsingDapper.Interfaces
{
public interface IProductRepository
{
Task<IEnumerable<Product>> GetAllProductsAsync();
Task<Product> GetProductByIdAsync(int id);
Task<int> CreateProductAsync(Product Product);
Task<bool> UpdateProductAsync(Product Product);
Task<bool> DeleteProductAsync(int id);
}
}
Product Repository Implementation
using APIDevelopmentUsingDapper.Interfaces;
using APIDevelopmentUsingDapper.Model;
using Dapper;
using System.Data;
namespace APIDevelopmentUsingDapper.Repositories
{
public class ProductRepository: IProductRepository
{
public IDapperDbConnection _dapperDbConnection;
public ProductRepository(IDapperDbConnection dapperDbConnection)
{
_dapperDbConnection = dapperDbConnection;
}
public async Task<IEnumerable<Product>> GetAllProductsAsync()
{
using(IDbConnection db = _dapperDbConnection.CreateConnection())
{
return await db.QueryAsync<Product>("SELECT * FROM Products");
}
}
public async Task<Product> GetProductByIdAsync(int id)
{
using(IDbConnection db = _dapperDbConnection.CreateConnection())
{
return await db.QueryFirstOrDefaultAsync<Product>("SELECT * FROM Products WHERE Id = @Id", new { Id = id });
}
}
public async Task<int> CreateProductAsync(Product Product)
{
using(IDbConnection db = _dapperDbConnection.CreateConnection())
{
const string query = "INSERT INTO Products (Name) VALUES (@Name); SELECT SCOPE_IDENTITY();";
return await db.ExecuteScalarAsync<int>(query, Product);
}
}
public async Task<bool> UpdateProductAsync(Product Product)
{
using(IDbConnection db = _dapperDbConnection.CreateConnection())
{
const string query = "UPDATE Products SET Name = @Name WHERE Id = @Id";
int rowsAffected = await db.ExecuteAsync(query, Product);
return rowsAffected > 0;
}
}
public async Task<bool> DeleteProductAsync(int id)
{
using(IDbConnection db = _dapperDbConnection.CreateConnection())
{
const string query = "DELETE FROM Products WHERE Id = @Id";
int rowsAffected = await db.ExecuteAsync(query, new { Id = id });
return rowsAffected > 0;
}
}
}
}

Shahbaz HussainPosted Dec 25, 2023, 7:03 AM
Good article helpful.