Фабрика для EF core в режиме dbcontext pool

161
28 июля 2019, 21:20

Необходимо сделать фабрику (проще лямбду конечно), которая бы выдавала свободный dbcontext из пула.

Регистрация EF выглядит так:

services.AddEntityFrameworkMySql().AddDbContextPool<ApplicationDbContext>(options => options.UseMySql(Configuration.GetConnectionString("DefaultConnection"));

Регистрация лямбды так:

services.AddTransient<Func<ApplicationDbContext>>(s => s.GetRequiredService<ApplicationDbContext>);

Однако при передаче в какой-нибудь долго живущий объект, который обращается к базе по событию/таймеру получаю исключение что контекст используется уже в другом месте.

public class SomeService
{
    public SomeService(Func<ApplicationDbContext> dbFact)
    {
        this.dbFact = dbFact;
    }
    private void DoSomething()
    {
        using (var db = dbFact())
        {
            // Do...
        }
    }
}

Ранее работал без пула подключений, но в результате получается так что в системе плодиться куча процессов mysql. Если на момент старта приложения процессов около 90 в таскменеджере, то спустя сутки/двое их становится +1400. Думаю они бы и дальше размножались если бы приложение не завершалось из-за нехватки ресурсов. Открытое подключение оборачиваю в using, но видать где-то оно все равно не высвобождается.

READ ALSO
FastColoredTextBox

FastColoredTextBox

Через NuGet установил данную библиотеку

110
Случайные вопросы

Случайные вопросы

Как можно реализовать с помощью генератора случайных вопросов считывания с файла *xml, для теста? Чтобы вопросы не шли по порядку, а в случайном...

176
Как работает spl_autoload_register?

Как работает spl_autoload_register?

В документации написано, что одним из аргументов spl_autoload_register передаётся функция autoloadОбъясните подробно, как работает функция spl_autoload_register...

126