From ce847e97a8fe8a757af8b005bbbbd9a9365cbf2a Mon Sep 17 00:00:00 2001 From: Shannon Date: Fri, 9 Aug 2013 10:07:03 +1000 Subject: [PATCH] Updates the PetaPocoRepositoryBase to ensure that the deletion process is wrapped in a transaction so if any of the processes fail, it all gets rolled back. --- .../Repositories/PetaPocoRepositoryBase.cs | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) 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