Open Giorgi opened 4 years ago
Putting this on the backlog as something that would be useful. However, traditional events may be more appropriate--see #626.
So this means that there is no way to do it in the 3.1 version right ?
@Giorgi Correct.
There is also no way to get the command text and parameters from IQueryable<> neither.
@Giorgi See #19358
Yes, looks like I will have to wait until EF Core 5
Since this is quite an old issue, is there a way to do this currently? In my case, I'm hoping to be able to attach a connection interceptor to an existing DbContext
(or through a IDbContextFactory
if more appropriate) with an interceptor that performs tenancy isolation. Basically so I can implement a DbContext CreateTenantContext(Guid tenantId)
factory method. As far as I can tell, my only option at the moment is to create a DbContext, force the connection to open (so it stays open), and then run a command on it.
@jamiewinder With a context factory, you control creating the instance of the context, so you can add whatever interceptors you want there. There isn't a way to add interceptors after the context has been initialized; this issue is tracking that.
@ajcvickers Thanks. Just to make sure I'm understanding correctly, I think I'm correct in saying that currently I can only control which interceptors are added when the factory is created rather than when I ask if for a context to be created? i.e. I can't do anything like this:
private readonly IDbContextFactory<MyContext> _contextFactory;
public MyContext CreateTenantContext(Guid tenantId)
{
var setTenancyInterceptor = new SetTenancyInterceptor(tenantId);
return _contextFactory.CreateDbContextWithInterceptors(setTenancyInterceptor);
}
(obviously CreateDbContextWithInterceptors
isn't a thing, just an example)
You can do whatever you want in your implementation of IDbContextFactory
.
It seems I grossly overestimated what was involved in creating a IDbContextFactory
! That's perfect, thanks for the pointers!
I know that interceptors can be added when creating the model using
DbContextOptionsBuilder.AddInterceptors
method but is there a way to add an interceptor instance on an existingDbContext
instance?This can be useful for third party library developers which want to add interception capability to the existing
DbContext
instance.