我希望在使用范围内在池中的函数中包含DbContext
我已经尝试将IServiceProvider添加到工厂,让工厂解析上下文并将其放入UoW,但是随后它告诉我在其他线程中使用了相同的包含。
services.AddDbContextPool<EmployeeContext>(options => options.UseSqlServer(connection));
...
using (var unitOfWork = factory.CreateUnitOfWork())
{
}
我想在使用依赖注入的DbContextPool的函数中创建工作单元范围。
答案 0 :(得分:2)
您可以在方法内部创建一个范围,但首先必须将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>();
}
}
}
请记住,当您放置示波器时,将丢弃您创建的对象。另外,如果不处理示波器,则会发生内存泄漏