diff --git a/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs b/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs
index 23c01e7768..dc86ff060c 100644
--- a/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs
+++ b/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs
@@ -119,9 +119,23 @@ namespace Umbraco.Core.Persistence
}
///
- public bool CanConnect => Configured && DbConnectionExtensions.IsConnectionAvailable(_connectionString, _providerName);
+ public bool CanConnect
+ {
+ get
+ {
+ if (!Configured || !DbConnectionExtensions.IsConnectionAvailable(_connectionString, _providerName)) return false;
- private DatabaseType DetectSqlServerVersion()
+ if (_serverVersionDetected) return true;
+
+ if (_databaseType.IsSqlServer())
+ DetectSqlServerVersion();
+ _serverVersionDetected = true;
+
+ return true;
+ }
+ }
+
+ private void DetectSqlServerVersion()
{
// replace NPoco database type by a more efficient one
@@ -138,28 +152,22 @@ 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");
-
- return databaseType;
+ versionName, _databaseType, fromSettings ? "settings" : "detected");
}
///
@@ -216,9 +224,6 @@ 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.");