Просто нет. никогда было бы неприемлемо для использования контекста EF с using
, но теперь, когда все вводится зависимостью, это совершенно невозможно.Если вам нужна копия вашего контекста, вам нужно внедрить ее в конструктор вашего класса:
public class Foo
{
private readonly ManagementStudioDbContext _context;
public Foo(ManagementStudioDbContext context)
{
_context = context ?? throw new ArgumentNullException(nameof(context));
}
...
}
Контекст ограничен, поэтому, если вам это нужно в объекте синглтонного типа, выдолжны использовать анти-шаблон сервис-локатор.Внедрите IServiceProvider
в ваш класс с единственным временем жизни, а затем, когда вам понадобится копия вашего контекста:
using (var scope = provider.CreateScope())
{
var context = scope.ServiceProvider.GetRequiredService<ManagementStudioDbContext>();
// do something with context
}
Это называется антипаттен, потому что вам следует избегать этого, если это вообще возможно.Вообще говоря, объекты не должны работать с объектами с более ограниченным временем жизни, чем они сами.