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<SpecificationTestColumnLayout>), typeof(TList<SpecificationMatrixDataColumnLayout>), typeof(TList<TestColumnObjectLayout>) };
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;
}