Dapper Integration

Because Dapper's idea is that the sql statement takes precedence, and mainly provides some extension methods for the IDbConnection interface.

Abp does not encapsulate too many functions for Dapper. Abp Dapper provides a DapperRepository<TDbContext> base class based on Abp EntityFrameworkCore, which provides the IDbConnection and IDbTransaction properties required by Dapper.

These two properties can work well with Unit-Of-Work.

Installation

Please install and configure EF Core according to EF Core's integrated documentation.

Volo.Abp.Dapper is the main nuget package for the Dapper integration. Install it to your project (for a layered application, to your data/infrastructure layer):

Install-Package Volo.Abp.Dapper

Then add AbpDapperModule module dependency (DependsOn attribute) to your module:

using Volo.Abp.Dapper;
using Volo.Abp.Modularity;

namespace MyCompany.MyProject
{
    [DependsOn(typeof(AbpDapperModule))]
    public class MyModule : AbpModule
    {
        //...
    }
}

Implement Dapper Repository

The following code implements the Person repository, which requires EF Core's DbContext (MyAppDbContext). You can inject PersonDapperRepository to call its methods.

DbConnection and DbTransaction are from the DapperRepository base class.

public class PersonDapperRepository : DapperRepository<MyAppDbContext>, ITransientDependency
{
    public PersonDapperRepository(IDbContextProvider<MyAppDbContext> dbContextProvider)
        : base(dbContextProvider)
    {
    }

    public virtual async Task<List<string>> GetAllPersonNames()
    {
        return (await DbConnection.QueryAsync<string>("select Name from People", transaction: DbTransaction))
            .ToList();
    }

    public virtual async Task<int> UpdatePersonNames(string name)
    {
        return await DbConnection.ExecuteAsync("update People set Name = @NewName", new { NewName = name },
            DbTransaction);
    }
}
In this document