Dapper 集成

Dapper 是轻量化的数据库提供者,使用Dapper主要的好处是编写T-SQL查询,它为 IDbConnection 接口提供了一些扩展方法.

ABP没有为Dapper封装许多功能, ABP Dapper库在ABP EntityFrameworkCore的基础上提供了 DapperRepository<TDbContext> 基类,在其中提供了Dapper需要的IDbConnectionIDbTransaction属性,这两个属性可以和工作单元很好的配合.

安装

请先根据EF Core的集成文档安装并配置好EF Core.

Volo.Abp.Dapper是Dapper集成的主要nuget包.

将其安装到你的项目中(在分层应用程序中适用于 数据访问/基础设施层):

  1. Install-Package Volo.Abp.Dapper

然后添加 AbpDapperModule 模块依赖项(DependsOn Attribute) 到 module(项目中的Mudole类):

  1. using Volo.Abp.Dapper;
  2. using Volo.Abp.Modularity;
  3. namespace MyCompany.MyProject
  4. {
  5. [DependsOn(typeof(AbpDapperModule))]
  6. public class MyModule : AbpModule
  7. {
  8. //...
  9. }
  10. }

实现Dapper仓储

下面的代码实现了Person仓储, 它需要EF Core的DbContext(MyAppDbContext). 你可以注入PersonDapperRepository来调用它的方法.

DbConnectionDbTransaction来自于DapperRepository基类.

  1. public class PersonDapperRepository : DapperRepository<MyAppDbContext>, ITransientDependency
  2. {
  3. public PersonDapperRepository(IDbContextProvider<MyAppDbContext> dbContextProvider)
  4. : base(dbContextProvider)
  5. {
  6. }
  7. public virtual async Task<List<string>> GetAllPersonNames()
  8. {
  9. return (await DbConnection.QueryAsync<string>("select Name from People", transaction: DbTransaction))
  10. .ToList();
  11. }
  12. public virtual async Task<int> UpdatePersonNames(string name)
  13. {
  14. return await DbConnection.ExecuteAsync("update People set Name = @NewName", new { NewName = name },
  15. DbTransaction);
  16. }
  17. }