Dapper

De Banane Atomic
Aller à la navigationAller à la recherche

Links

Description

Dapper is ideal for scenarios where performance is critical and developers want fine-grained control over the database operations.
Dapper is also easy to learn and use comparing to EF.

No code factorization with Dapper like generic repository unless you create your own SQL generator.

Nuget packages

Bash.svg
dotnet add package Dapper

dotnet add package MySQLConnection  # for MySqlConnection

Dependency Injection

Program.cs
var connectionString = builder.Configuration.GetConnectionString("MyDatabase");
builder.Services.AddSingleton<IDbConnectionFactory, MySqlConnectionFactory>(
    _ => new MySqlConnectionFactory(connectionString));
DataAccess/MySqlConnectionFactory.cs
public class MySqlConnectionFactory : IDbConnectionFactory
{
    private readonly string connectionString;

    public MySqlConnectionFactory(string connectionString)
    {
        this.connectionString = connectionString;
    }

    public IDbConnection CreateConnection() => new MySqlConnection(connectionString);
}
DataAccess/IDbConnectionFactory.cs
public interface IDbConnectionFactory
{
    IDbConnection CreateConnection();
}
Repositories/ItemRepository.cs
using var dbConnection = dbConnectionFactory.CreateConnection();

var sql = """
    select * from item
""");
var items = await dbConnection.QueryAsync<Item>(sql);