public bool DeepDelete(SpecificationMatrixTemplateLayout entity) { bool success = false; // Create a Transaction TransactionManager DbTransactionManager = new TransactionManager(DbConnectionString); try { // First We should Deep Load All Child Objects Type[] ChildObjects = new Type[] { typeof(TList), typeof(TList), typeof(TList) }; DeepLoad(entity, true, DeepLoadType.IncludeChildren, ChildObjects); // Start Transaction DbTransactionManager.BeginTransaction(); // Try Deleting Data Column Children if (DataRepository.SpecificationMatrixDataColumnLayoutDAL.Delete(DbTransactionManager, entity.SpecificationMatrixDataColumnLayoutCollection) == entity.SpecificationMatrixDataColumnLayoutCollection.Count) { // See if I have Parent Test Columns if (entity.SpecificationTestColumnLayoutCollection.Count > 0) { // Try Deleting Test Column Children for (int i = 0; i < entity.SpecificationTestColumnLayoutCollection.Count; i++) { // See if the Current Parent Has Children if (entity.SpecificationTestColumnLayoutCollection[i].TestColumnObjectLayoutCollection.Count > 0) { // Now We will walk through the test columns and delete the children collections within if (DataRepository.TestColumnObjectLayoutDAL.Delete(DbTransactionManager, entity.SpecificationTestColumnLayoutCollection[i].TestColumnObjectLayoutCollection) == entity.SpecificationTestColumnLayoutCollection[i].TestColumnObjectLayoutCollection.Count) { // No Hickups in Child Removal Process, Remove Test Columns if (DataRepository.SpecificationTestColumnLayoutDAL.Delete(DbTransactionManager, entity.SpecificationTestColumnLayoutCollection[i])) { // Entire Delete Was Successful success = true; } else { // Cancel this attempt success = false; DbTransactionManager.Rollback(); } } else { // Cancel this attempt success = false; DbTransactionManager.Rollback(); } } else { // Just Delete the current Parent if (DataRepository.SpecificationTestColumnLayoutDAL.Delete(DbTransactionManager, entity.SpecificationTestColumnLayoutCollection[i])) { // Entire Delete Was Successful success = true; } else { // Cancel this attempt success = false; DbTransactionManager.Rollback(); } } } } else { success = true; } // If The Top Logic has had Success Lets Remove the Parent Entity if (success) { if (DataRepository.SpecificationMatrixTemplateLayoutDAL.Delete(DbTransactionManager, entity)) { // The entire Object Has been Removed Commit the Transaction DbTransactionManager.Commit(); } else { success = false; DbTransactionManager.Rollback(); } } } else { // Cancel this attempt DbTransactionManager.Rollback(); } } catch (Exception ex) { DbTransactionManager.Rollback(); throw new Exception(ex.Message + " Matrix Template BLL"); } finally { DbTransactionManager.Dispose(); } return success; }