public static void DeleteObjects(List <BusinessObject> objectsToDelete) { if (objectsToDelete == null) { objectsToDelete = _objectsToDelete; } int count = objectsToDelete.Count; Dictionary <BusinessObject, int> failureHistory = new Dictionary <BusinessObject, int>(); while (objectsToDelete.Count > 0) { BusinessObject thisBo = objectsToDelete[objectsToDelete.Count - 1]; try { if (!thisBo.Status.IsNew) { thisBo.CancelEdits(); thisBo.MarkForDelete(); thisBo.Save(); } objectsToDelete.Remove(thisBo); } catch { int failureCount = 0; if (failureHistory.ContainsKey(thisBo)) { failureCount = failureHistory[thisBo]++; } else { failureHistory.Add(thisBo, failureCount + 1); } objectsToDelete.Remove(thisBo); if (failureCount <= count) { objectsToDelete.Insert(0, thisBo); } else { throw; } } } }