Как получить экземпляр DbContext из пула с внедрением зависимостей во время метода? - PullRequest
2 голосов
/ 21 июня 2019

Я хочу иметь DbContext в функции из пула во время использования области действия

Я уже пытался добавить IServiceProvider к фабрике и позволить фабрике разрешить контекст и поместить его в UoW, но затем он сообщает, что то же содержимое используется в других потоках.

services.AddDbContextPool<EmployeeContext>(options => options.UseSqlServer(connection));
...
using (var unitOfWork = factory.CreateUnitOfWork())
{
}

Я хочу создать область действия в рамках функции, которая использует DbContextPool внедрения зависимостей.

1 Ответ

2 голосов
/ 21 июня 2019

Вы можете создать область видимости внутри вашего метода, но сначала вам нужно внедрить IServiceScopeFactory в ваш класс.

using Microsoft.Extensions.DependencyInjection;


public class SomeService
{
    private readonly IServiceScopeFactory _serviceScopeFactory;

    public SomeService(IServiceScopeFactory serviceScopeFactory)
    {
        _serviceScopeFactory = serviceScopeFactory;
    }

    public Task DoStuff()
    {
        using (var serviceScope = _serviceScopeFactory.CreateScope())
        {
            var unitOfWork =  serviceScope.ServiceProvider.GetRequiredService<UnitOfWork>();
        }
    }
}

Имейте в виду, что созданный вами объект будет удален при удалении области действия.Кроме того, если вы не утилизируете прицел, вы получите утечки памяти

...