Можем ли мы использовать ASP.NET Boilerplate с Dapper вместо Entity Framework Core? - PullRequest
0 голосов
/ 13 марта 2019

Я новичок в ASP.NET Boilerplate и Dapper. Из учебника я узнал, что ASP.NET Boilerplate работает с Entity Framework Core. Можем ли мы использовать другой уровень доступа к данным вместо EF Core? Совместим ли ASP.NET Boilerplate с Dapper?

1 Ответ

0 голосов
/ 14 марта 2019

Конечно! Вы можете использовать Dapper.

Установка

Перед началом работы необходимо установить https://www.nuget.org/packages/Abp.Dapper, либо EF Core, EF 6.x или пакеты NHibernate ORM NuGet в проект, который вы хотите использовать.


Регистрация модуля

Сначала вам нужно добавить атрибут DependsOn для AbpDapperModule в вашем модуле, где вы его зарегистрировали

[DependsOn(
     typeof(AbpEntityFrameworkCoreModule),
     typeof(AbpDapperModule)
)]
public class MyModule : AbpModule
{
    public override void Initialize()
    {
        IocManager.RegisterAssemblyByConvention(typeof(SampleApplicationModule).GetAssembly());
    }
}

Отображение сущности в таблицу

Вы можете настроить сопоставления. Например, класс Person отображается в таблицу Persons в следующем примере:

public class PersonMapper : ClassMapper<Person>
{
    public PersonMapper()
    {
        Table("Persons");
        Map(x => x.Roles).Ignore();
        AutoMap();
    }
}

Пример модуля :

[DependsOn(
     typeof(AbpEntityFrameworkModule),
     typeof(AbpDapperModule)
)]
public class MyModule : AbpModule
{
    public override void Initialize()
    {
        IocManager.RegisterAssemblyByConvention(typeof(SampleApplicationModule).GetAssembly());
        DapperExtensions.SetMappingAssemblies(new List<Assembly> { typeof(MyModule).GetAssembly() });
    }
}

Использование

После регистрации AbpDapperModule вы можете использовать интерфейс Generic IDapperRepository (вместо стандартного IRepository) для внедрения репозиториев Dapper.

public class SomeApplicationService : ITransientDependency
{
    private readonly IDapperRepository<Person> _personDapperRepository;
    private readonly IRepository<Person> _personRepository;

    public SomeApplicationService(
        IRepository<Person> personRepository,
        IDapperRepository<Person> personDapperRepository)
    {
        _personRepository = personRepository;
        _personDapperRepository = personDapperRepository;
    }

    public void DoSomeStuff()
    {
        var people = _personDapperRepository.Query("select * from Persons");
    }
}

Проверьте эти ссылки:

...