You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
abp/docs/cs/Dapper.md

2.1 KiB

Dapper integrace

Jelikož myšlenka Dapper je taková, že sql příkaz má přednost, tak hlavně poskytuje metody rozšíření pro IDbConnection rozhraní.

Abp nezapouzdřuje přílíš mnoho funkcí pro Dapper. Abp Dapper poskytuje základní třídu DapperRepository<TDbContext> založenou na Abp EntityFrameworkCore, který poskytuje vlastnosti IDbConnection a IDbTransaction vyžadované v Dapper.

Tyto dvě vlastnosti fungují dobře s jednotkou práce.

Instalace

Nainstalujte a nakonfigurujte EF Core podle EF Core integrační dokumentace.

Volo.Abp.Dapper je hlavní NuGet balík pro Dapper integraci. Nainstalujte jej proto do vašeho projektu (pro strukturovanou aplikaci do datové/infrastrukturní vrstvy):

Install-Package Volo.Abp.Dapper

Poté přidejte závislost na AbpDapperModule modulu (atribut DependsOn) do Vašeho modulu:

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

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

Implementace Dapper repozitáře

Následující kód implementuje repozitář Person, který vyžaduje DbContext z EF Core (MyAppDbContext). Můžete vložit PersonDapperRepository k volání jeho metod.

DbConnection a DbTransaction jsou ze základní třídy DapperRepository.

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);
    }
}