diff --git a/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs b/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs index dc86ff060c..23c01e7768 100644 --- a/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs +++ b/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs @@ -119,23 +119,9 @@ namespace Umbraco.Core.Persistence } /// - public bool CanConnect - { - get - { - if (!Configured || !DbConnectionExtensions.IsConnectionAvailable(_connectionString, _providerName)) return false; + public bool CanConnect => Configured && DbConnectionExtensions.IsConnectionAvailable(_connectionString, _providerName); - if (_serverVersionDetected) return true; - - if (_databaseType.IsSqlServer()) - DetectSqlServerVersion(); - _serverVersionDetected = true; - - return true; - } - } - - private void DetectSqlServerVersion() + private DatabaseType DetectSqlServerVersion() { // replace NPoco database type by a more efficient one @@ -152,22 +138,28 @@ namespace Umbraco.Core.Persistence fromSettings = true; } + DatabaseType databaseType; switch (versionName) { case SqlServerSyntaxProvider.VersionName.V2008: - _databaseType = DatabaseType.SqlServer2008; + databaseType = DatabaseType.SqlServer2008; break; case SqlServerSyntaxProvider.VersionName.V2012: case SqlServerSyntaxProvider.VersionName.V2014: case SqlServerSyntaxProvider.VersionName.V2016: case SqlServerSyntaxProvider.VersionName.V2017: - _databaseType = DatabaseType.SqlServer2012; + databaseType = DatabaseType.SqlServer2012; break; // else leave unchanged + default: + databaseType = _databaseType; + break; } _logger.Debug("SqlServer {SqlServerVersion}, DatabaseType is {DatabaseType} ({Source}).", - versionName, _databaseType, fromSettings ? "settings" : "detected"); + versionName, databaseType, fromSettings ? "settings" : "detected"); + + return databaseType; } /// @@ -224,6 +216,9 @@ namespace Umbraco.Core.Persistence if (_npocoDatabaseFactory == null) throw new NullReferenceException("The call to UmbracoDatabaseFactory.Config yielded a null UmbracoDatabaseFactory instance."); + if (_databaseType.IsSqlServer() && DbConnectionExtensions.IsConnectionAvailable(_connectionString, _providerName)) + _databaseType = DetectSqlServerVersion(); + SqlContext = new SqlContext(_sqlSyntax, _databaseType, _pocoDataFactory, _mappers); _logger.Debug("Configured.");