diff --git a/src/Umbraco.Core/Persistence/NPocoDatabaseExtensions-Bulk.cs b/src/Umbraco.Core/Persistence/NPocoDatabaseExtensions-Bulk.cs index 09f754c47a..c9d85feb25 100644 --- a/src/Umbraco.Core/Persistence/NPocoDatabaseExtensions-Bulk.cs +++ b/src/Umbraco.Core/Persistence/NPocoDatabaseExtensions-Bulk.cs @@ -4,10 +4,7 @@ using System.Data; using System.Data.SqlClient; using System.Data.SqlServerCe; using System.Linq; -using System.Text; -using System.Threading.Tasks; using NPoco; -using StackExchange.Profiling.Data; using Umbraco.Core.Persistence.SqlSyntax; namespace Umbraco.Core.Persistence diff --git a/src/Umbraco.Core/Persistence/NPocoDatabaseExtensions.cs b/src/Umbraco.Core/Persistence/NPocoDatabaseExtensions.cs index bb4c60a0df..acfa51f895 100644 --- a/src/Umbraco.Core/Persistence/NPocoDatabaseExtensions.cs +++ b/src/Umbraco.Core/Persistence/NPocoDatabaseExtensions.cs @@ -147,8 +147,23 @@ namespace Umbraco.Core.Persistence private static TConnection GetTypedConnection(IDbConnection connection) where TConnection : class, IDbConnection { - var profiled = connection as ProfiledDbConnection; - return profiled == null ? connection as TConnection : profiled.WrappedConnection as TConnection; + var c = connection; + for (;;) + { + switch (c) + { + case TConnection ofType: + return ofType; + case RetryDbConnection retry: + c = retry.Inner; + break; + case ProfiledDbConnection profiled: + c = profiled.WrappedConnection; + break; + default: + throw new NotSupportedException(connection.GetType().FullName); + } + } } /// @@ -160,8 +175,20 @@ namespace Umbraco.Core.Persistence private static TTransaction GetTypedTransaction(IDbTransaction transaction) where TTransaction : class, IDbTransaction { - var profiled = transaction as ProfiledDbTransaction; - return profiled == null ? transaction as TTransaction : profiled.WrappedTransaction as TTransaction; + var t = transaction; + for (;;) + { + switch (t) + { + case TTransaction ofType: + return ofType; + case ProfiledDbTransaction profiled: + t = profiled.WrappedTransaction; + break; + default: + throw new NotSupportedException(transaction.GetType().FullName); + } + } } /// @@ -173,11 +200,23 @@ namespace Umbraco.Core.Persistence private static TCommand GetTypedCommand(IDbCommand command) where TCommand : class, IDbCommand { - var faultHandling = command as FaultHandlingDbCommand; - if (faultHandling != null) command = faultHandling.Inner; - var profiled = command as ProfiledDbCommand; - if (profiled != null) command = profiled.InternalCommand; - return command as TCommand; + var c = command; + for (;;) + { + switch (c) + { + case TCommand ofType: + return ofType; + case FaultHandlingDbCommand faultHandling: + c = faultHandling.Inner; + break; + case ProfiledDbCommand profiled: + c = profiled.InternalCommand; + break; + default: + throw new NotSupportedException(command.GetType().FullName); + } + } } public static void TruncateTable(this IDatabase db, ISqlSyntaxProvider sqlSyntax, string tableName)