v10: Support System.Data.SqlClient provider name (#12408)
* Add support for System.Data.SqlClient provider name * Only update connection string when required
This commit is contained in:
@@ -2,6 +2,7 @@ using System.Data.Common;
|
||||
using Microsoft.Data.SqlClient;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
using Umbraco.Cms.Core.Configuration.Models;
|
||||
using Umbraco.Cms.Core.DependencyInjection;
|
||||
using Umbraco.Cms.Core.DistributedLocking;
|
||||
using Umbraco.Cms.Infrastructure.Persistence;
|
||||
@@ -37,6 +38,15 @@ public static class UmbracoBuilderExtensions
|
||||
DbProviderFactories.UnregisterFactory(Constants.ProviderName);
|
||||
DbProviderFactories.RegisterFactory(Constants.ProviderName, SqlClientFactory.Instance);
|
||||
|
||||
// Support provider name set by the configuration API for connection string environment variables
|
||||
builder.Services.ConfigureAll<ConnectionStrings>(options =>
|
||||
{
|
||||
if (options.ProviderName == "System.Data.SqlClient")
|
||||
{
|
||||
options.ProviderName = Constants.ProviderName;
|
||||
}
|
||||
});
|
||||
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,28 +39,21 @@ public static class UmbracoBuilderExtensions
|
||||
DbProviderFactories.UnregisterFactory(Constants.ProviderName);
|
||||
DbProviderFactories.RegisterFactory(Constants.ProviderName, Microsoft.Data.Sqlite.SqliteFactory.Instance);
|
||||
|
||||
|
||||
builder.Services.PostConfigure<ConnectionStrings>(Core.Constants.System.UmbracoConnectionName, opt =>
|
||||
// Prevent accidental creation of SQLite database files
|
||||
builder.Services.PostConfigureAll<ConnectionStrings>(options =>
|
||||
{
|
||||
if (!opt.IsConnectionStringConfigured())
|
||||
// Skip empty connection string and other providers
|
||||
if (!options.IsConnectionStringConfigured() || options.ProviderName != Constants.ProviderName)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (opt.ProviderName != Constants.ProviderName)
|
||||
{
|
||||
// Not us.
|
||||
return;
|
||||
}
|
||||
|
||||
// Prevent accidental creation of database files.
|
||||
var connectionStringBuilder = new SqliteConnectionStringBuilder(opt.ConnectionString);
|
||||
var connectionStringBuilder = new SqliteConnectionStringBuilder(options.ConnectionString);
|
||||
if (connectionStringBuilder.Mode == SqliteOpenMode.ReadWriteCreate)
|
||||
{
|
||||
connectionStringBuilder.Mode = SqliteOpenMode.ReadWrite;
|
||||
options.ConnectionString = connectionStringBuilder.ConnectionString;
|
||||
}
|
||||
|
||||
opt.ConnectionString = connectionStringBuilder.ConnectionString;
|
||||
});
|
||||
|
||||
return builder;
|
||||
|
||||
@@ -18,11 +18,12 @@ public class ConfigureConnectionStrings : IConfigureNamedOptions<ConnectionStrin
|
||||
public ConfigureConnectionStrings(IConfiguration configuration) => _configuration = configuration;
|
||||
|
||||
/// <inheritdoc />
|
||||
public void Configure(ConnectionStrings options) => Configure(Constants.System.UmbracoConnectionName, options);
|
||||
public void Configure(ConnectionStrings options) => Configure(Options.DefaultName, options);
|
||||
|
||||
/// <inheritdoc />
|
||||
public void Configure(string name, ConnectionStrings options)
|
||||
{
|
||||
// Default to using UmbracoConnectionName
|
||||
if (name == Options.DefaultName)
|
||||
{
|
||||
name = Constants.System.UmbracoConnectionName;
|
||||
|
||||
Reference in New Issue
Block a user