Получить экземпляр DbContext, используемый репозиторием asp.net - PullRequest
0 голосов
/ 19 сентября 2018

Я начал новый проект с использованием Aspnet Boiler plate, но больше не чувствую необходимости использовать репозитории и множество скрытых разработок, выполняемых за кулисами.

Поэтому я с нетерпением жду возможности получить экземпляр контекста db, созданногоКаркас репозиториев Abp и

  1. работают непосредственно с основными запросами LINQ Ef.
  2. Зафиксируйте мои изменения напрямую, используя SaveChanges, а не полагайтесь на абстрактные транзакции.

Как мне получить этот экземпляр, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 31 июля 2019

@ NitinSawant У меня была похожая проблема, хотя в моем случае рассматриваемый параметр был специально вызван как unitOfWork.У меня был вспомогательный класс очистки и обновления базы данных, который был запущен из метода Postinitialize модуля:

public override void PostInitialize()
{
    // The hypothetical 'SweeperClass' in this example uses constructor
    // injection to obtain a IDbContextProvider instance and from there
    // get hold of a DbContext.
    //
    // As written, this code threw a null argument exception.

    var sweeperClass = IocManager.Resolve<SweeperClass>();
    // ...do stuff...
}

В этом случае, к счастью, это был просто вопрос также разрешения единицы измерения.работать, чтобы обернуть конструкцию другого объекта.

using Abp.Domain.Uow;

public override void PostInitialize()
{
    using (IocManager.Resolve<IUnitOfWorkManager>().Begin())
    {
        var sweeperClass = IocManager.Resolve<SweeperClass>();
        // ...do stuff...
    }
}

Так что ответ @ koryakinp дал мне большую часть решения, и мне просто потребовалась вышеуказанная корректировка, чтобы все пошло по моему конкретному сценарию использования.

0 голосов
/ 19 сентября 2018
  1. напрямую работает с основными запросами LINQ Ef.

Вы можете получить экземпляр DbContext, используя GetDbContext() из IDbContextProvider.

private readonly YourDbContext _ctx;

public YourService(IDbContextProvider<YourDbContext> dbContextProvider)
{
    _ctx = dbContextProvider.GetDbContext();
}
Зафиксируйте мои изменения напрямую, используя SaveChanges, а не полагаясь на абстрактные транзакции.

Вы можете отключить транзакции, применив атрибут [UnitOfWork(IsDisabled = true)]

Here - соответствующая статья об управлении транзакциями с помощью ASP.NET Boilerplate.

...