Database Access with Dapper: Best Practices

Ibrahim Jaber
5 min readApr 11

As a .NET Core developer, you may have heard of Dapper, a simple and lightweight ORM (Object-Relational Mapping) tool. It allows you to query databases in a fast and efficient way, without the overhead of a full-fledged ORM like Entity Framework. In this blog post, we will explore some best practices for using Dapper in a .NET Core API application, and demonstrate how to apply these practices to a real-world business problem.

1. Define your model classes

Before you start using Dapper, it’s important to define your model classes that represent the tables in your database. These classes should map to the columns in the table and have properties that correspond to each column.

For example, let’s say we have a “Products” table in our database with the following columns:

  • ProductId (int)
  • Name (nvarchar)
  • Description (nvarchar)
  • Price (decimal)

We can define a model class like this:

public class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
}

2. Use parameterized queries

Parameterized queries are an essential best practice when working with Dapper, as they help prevent SQL injection attacks. Instead of concatenating strings to build your queries, use parameters to pass values to your queries.

For example, let’s say we want to retrieve a product by its ID. We can use a parameterized query like this:

using (var connection = new SqlConnection(_connectionString))
{
connection.Open();
var sql = "SELECT * FROM Products WHERE ProductId = @ProductId";
var product = connection.QueryFirstOrDefault<Product>(sql, new { ProductId = id });
return product;
}

3. Use asynchronous methods

In a web application, it’s important to use asynchronous methods to avoid blocking the main thread and keep your application responsive. Dapper provides asynchronous methods that allow you to perform database operations without blocking the main thread.

For example, let’s say we want to retrieve all products from the database. We can use an asynchronous method like this:

Ibrahim Jaber

Software developer | Programming and Blockchain enthusiast