Do not dispose EF Core contexts manually (#15649)

* Attempt to fix #15090. Save connection string in private variable after setup.

* Do not dispose ef core contexts when if the connectionstring changes.

A Ef core context is protected from creations when no connection string is present. If it changes that single instance will continue with the connection string it was initialized with.

* Clean up

* Review Equals methods
This commit is contained in:
Bjarke Berg
2024-01-31 15:09:12 +01:00
committed by GitHub
parent 7379a752f1
commit 5146f05625

View File

@@ -36,19 +36,14 @@ public class UmbracoDbContext : DbContext
/// </summary>
/// <param name="options"></param>
public UmbracoDbContext(DbContextOptions<UmbracoDbContext> options)
: base(ConfigureOptions(options, out IOptionsMonitor<ConnectionStrings>? connectionStringsOptionsMonitor))
: base(ConfigureOptions(options))
{
connectionStringsOptionsMonitor.OnChange(c =>
{
ILogger<UmbracoDbContext> logger = StaticServiceProvider.Instance.GetRequiredService<ILogger<UmbracoDbContext>>();
logger.LogWarning("Connection string changed, disposing context");
Dispose();
});
}
private static DbContextOptions<UmbracoDbContext> ConfigureOptions(DbContextOptions<UmbracoDbContext> options, out IOptionsMonitor<ConnectionStrings> connectionStringsOptionsMonitor)
private static DbContextOptions<UmbracoDbContext> ConfigureOptions(DbContextOptions<UmbracoDbContext> options)
{
connectionStringsOptionsMonitor = StaticServiceProvider.Instance.GetRequiredService<IOptionsMonitor<ConnectionStrings>>();
IOptionsMonitor<ConnectionStrings> connectionStringsOptionsMonitor = StaticServiceProvider.Instance.GetRequiredService<IOptionsMonitor<ConnectionStrings>>();
ConnectionStrings connectionStrings = connectionStringsOptionsMonitor.CurrentValue;