diff --git a/src/Umbraco.Core/Persistence/Repositories/PetaPocoRepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/PetaPocoRepositoryBase.cs index a08dec6c76..5aca4adaa7 100644 --- a/src/Umbraco.Core/Persistence/Repositories/PetaPocoRepositoryBase.cs +++ b/src/Umbraco.Core/Persistence/Repositories/PetaPocoRepositoryBase.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using Umbraco.Core.Logging; using Umbraco.Core.Models.EntityBase; using Umbraco.Core.Persistence.Caching; using Umbraco.Core.Persistence.Querying; @@ -69,10 +70,26 @@ namespace Umbraco.Core.Persistence.Repositories protected override void PersistDeletedItem(TEntity entity) { var deletes = GetDeleteClauses(); - foreach (var delete in deletes) + + //wrap in a transaction in case any of the delete processes fail so they'll get rolled back! + using (var trans = Database.GetTransaction()) { - Database.Execute(delete, new {Id = entity.Id}); + try + { + foreach (var delete in deletes) + { + Database.Execute(delete, new { Id = entity.Id }); + } + trans.Complete(); + } + catch (Exception ex) + { + trans.Dispose(); + LogHelper.Error(GetType(), "Deletion process failed, transaction rolled back", ex); + throw; + } } + } } } \ No newline at end of file