-
Notifications
You must be signed in to change notification settings - Fork 3.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Capture events in constructor configuration when using context pooling #19193
Comments
@KenBrannigan This is by design. Each time you return a MyDbContext instance from the pool it gets all its state removed, so these events should be added whenever the context is requested from the pool. #17086 would make this simpler |
@AndriySvyryd for other things that can be set in the constructor we make an effort to reset the the values that were set after the constructor finished. We should discuss whether or not to try to do this here. |
We discussed this in triage and decided that rather than continue along the path we have been on with capturing and resetting constructor configuration, we should implement #17086 and direct people to use that for per-request configuration of the instance. We may then choose to stop capturing configuration at all. We could even "Reset" the context after it has been constructed. |
…e pool. Fixes #19193 Fixes #17086 Notes: * We now no longer reset context events, as per #19193 * However, I left the code that resets options like QueryTrackingBehavior since that still seems useful, and makes this less of a break * Added events to DbContext. These are easy and decoupled, but sync only. * A derived DbContext can override the On... event methods. This allows async hooks. * DbContextFactory now has a CreateDbContextAsync method such that a context can be rented from the pool and the hook applied in an async context.
We discussed it in triage again and decided to go back to resetting the state to what was captured after the constructor. |
…e pool. Fixes #19193 Fixes #17086 Notes: * We now no longer reset context events, as per #19193 * However, I left the code that resets options like QueryTrackingBehavior since that still seems useful, and makes this less of a break * Added events to DbContext. These are easy and decoupled, but sync only. * A derived DbContext can override the On... event methods. This allows async hooks. * DbContextFactory now has a CreateDbContextAsync method such that a context can be rented from the pool and the hook applied in an async context.
…e pool. Fixes #19193 Fixes #17086 Notes: * We now no longer reset context events, as per #19193 * However, I left the code that resets options like QueryTrackingBehavior since that still seems useful, and makes this less of a break * Added events to DbContext. These are easy and decoupled, but sync only. * A derived DbContext can override the On... event methods. This allows async hooks. * DbContextFactory now has a CreateDbContextAsync method such that a context can be rented from the pool and the hook applied in an async context.
…e pool. Fixes #19193 Notes: * We now no longer reset context events, as per #19193 * However, I left the code that resets options like QueryTrackingBehavior since that still seems useful, and makes this less of a break * Added events to DbContext. These are easy and decoupled, but sync only. * A derived DbContext can override the On... event methods. This allows async hooks. * DbContextFactory now has a CreateDbContextAsync method such that a context can be rented from the pool and the hook applied in an async context.
…e pool. Fixes #19193 Notes: * We now no longer reset context events, as per #19193 * However, I left the code that resets options like QueryTrackingBehavior since that still seems useful, and makes this less of a break * Added events to DbContext. These are easy and decoupled, but sync only. * A derived DbContext can override the On... event methods. This allows async hooks. * DbContextFactory now has a CreateDbContextAsync method such that a context can be rented from the pool and the hook applied in an async context.
Fixes #19193 Co-authored-by: Andriy Svyryd <[email protected]>
I have a ASP.NET Core 3.0 application using .NET Core 3.0 and EF Core 3.0. I am using AddDbContextPool to register my DbContext:
In my DbContext constructor, I attach to two events of the ChangeTracker:
The first time I run the application the events are fired when I add items to my context. Once the page is done loading I make another request but none of my events fire this time when adding items to my context. It seems when it pulls a context out of the pool it no longer has the event handlers registered.
I have no issues when I use regular AddDbContext. Is this expected behavior or is there a different way I should register my event handlers?
The text was updated successfully, but these errors were encountered: