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