v10: Use ForceCreateDatabase during unattended install and extend GetUmbracoConnectionString extension methods (#12397)

* Add extension methods to get the Umbraco connection string/provider name from configuration

* Added tests for configuration extension methods.

* Fix issue with InstallMissingDatabase and ForceCreateDatabase

* Fix comments

* Revert casing change in GenerateConnectionString

* Re-add AddOptions (without config binding) to fix test

* Update src/Umbraco.Core/Configuration/Models/ConnectionStrings.cs

Co-authored-by: Ronald Barendse <ronald@barend.se>

* Update src/Umbraco.Core/Configuration/Models/ConnectionStrings.cs

* Update src/Umbraco.Infrastructure/Runtime/RuntimeState.cs

* Whitespace and documentation updates

* Add DatabaseProviderMetadataExtensions

* Filter before ordering

* Replace DataDirectory placeholder when setting connection string

Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
This commit is contained in:
Ronald Barendse
2022-05-17 12:59:01 +02:00
committed by GitHub
parent e82bcb1b76
commit 8e6e262c7f
15 changed files with 487 additions and 243 deletions

View File

@@ -1,35 +1,24 @@
// Copyright (c) Umbraco.
// See LICENSE for more details.
using System;
using Microsoft.Extensions.Configuration;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Configuration.Models;
namespace Umbraco.Extensions
namespace Umbraco.Extensions;
/// <summary>
/// Extension methods for a connection string.
/// </summary>
public static class ConnectionStringExtensions
{
public static class ConnectionStringExtensions
{
public static bool IsConnectionStringConfigured(this ConnectionStrings connectionString)
=> connectionString != null &&
!string.IsNullOrWhiteSpace(connectionString.ConnectionString) &&
!string.IsNullOrWhiteSpace(connectionString.ProviderName);
/// <summary>
/// Gets a connection string from configuration with placeholders replaced.
/// </summary>
public static string? GetUmbracoConnectionString(
this IConfiguration configuration,
string connectionStringName = Constants.System.UmbracoConnectionName) =>
configuration.GetConnectionString(connectionStringName).ReplaceDataDirectoryPlaceholder();
/// <summary>
/// Replaces instances of the |DataDirectory| placeholder in a string with the value of AppDomain DataDirectory.
/// </summary>
public static string? ReplaceDataDirectoryPlaceholder(this string input)
{
var dataDirectory = AppDomain.CurrentDomain.GetData("DataDirectory")?.ToString();
return input?.Replace(ConnectionStrings.DataDirectoryPlaceholder, dataDirectory);
}
}
/// <summary>
/// Determines whether the connection string is configured (set to a non-empty value).
/// </summary>
/// <param name="connectionString">The connection string.</param>
/// <returns>
/// <c>true</c> if the connection string is configured; otherwise, <c>false</c>.
/// </returns>
public static bool IsConnectionStringConfigured(this ConnectionStrings connectionString)
=> connectionString != null &&
!string.IsNullOrWhiteSpace(connectionString.ConnectionString) &&
!string.IsNullOrWhiteSpace(connectionString.ProviderName);
}