diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs index 6fc5396b..27ee0f32 100644 --- a/server/AyaNova/biz/WorkOrderBiz.cs +++ b/server/AyaNova/biz/WorkOrderBiz.cs @@ -199,15 +199,11 @@ namespace AyaNova.Biz //collect the child id's to delete var ItemIds = await ct.WorkOrderItem.Where(m => m.WorkOrderId == id).Select(m => m.Id).ToListAsync(); - //Delete children - foreach (long ItemId in ItemIds) - { + foreach (long ItemId in ItemIds) if (!await ItemDeleteAsync(ItemId, transaction)) return false; - } - - + ct.WorkOrder.Remove(dbObject); await ct.SaveChangesAsync(); @@ -421,52 +417,56 @@ namespace AyaNova.Biz //DELETE // internal async Task ItemDeleteAsync(long id, Microsoft.EntityFrameworkCore.Storage.IDbContextTransaction parentTransaction = null) - { - using (var transaction = parentTransaction ?? await ct.Database.BeginTransactionAsync()) + { + Microsoft.EntityFrameworkCore.Storage.IDbContextTransaction transaction = null; + if (parentTransaction == null) + transaction = await ct.Database.BeginTransactionAsync(); + try { - try + WorkOrderItem dbObject = await ct.WorkOrderItem.SingleOrDefaultAsync(m => m.Id == id); + ItemValidateCanDelete(dbObject); + if (HasErrors) + return false; + + //collect the child id's to delete + var LaborIds = await ct.WorkOrderItemLabor.Where(m => m.WorkOrderItemId == id).Select(m => m.Id).ToListAsync(); + var PartIds = await ct.WorkOrderItemPart.Where(m => m.WorkOrderItemId == id).Select(m => m.Id).ToListAsync(); + + //Delete children + foreach (long ItemId in LaborIds) { - WorkOrderItem dbObject = await ct.WorkOrderItem.SingleOrDefaultAsync(m => m.Id == id); - ItemValidateCanDelete(dbObject); - if (HasErrors) + if (!await LaborDeleteAsync(ItemId)) return false; - - //collect the child id's to delete - var LaborIds = await ct.WorkOrderItemLabor.Where(m => m.WorkOrderItemId == id).Select(m => m.Id).ToListAsync(); - var PartIds = await ct.WorkOrderItemPart.Where(m => m.WorkOrderItemId == id).Select(m => m.Id).ToListAsync(); - - //Delete children - foreach (long ItemId in LaborIds) - { - if (!await LaborDeleteAsync(ItemId)) - return false; - } - foreach (long ItemId in PartIds) - { - if (!await PartDeleteAsync(ItemId)) - return false; - } - - ct.WorkOrderItem.Remove(dbObject); - await ct.SaveChangesAsync(); - - //Log event - await EventLogProcessor.DeleteObjectLogAsync(UserId, AyaType.WorkOrderItem, dbObject.Id, "wo:" + dbObject.WorkOrderId.ToString(), ct); - await Search.ProcessDeletedObjectKeywordsAsync(dbObject.Id, AyaType.WorkOrderItem); - await TagUtil.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); - - //all good do the commit if it's ours - if (parentTransaction == null) - await transaction.CommitAsync(); } - catch + foreach (long ItemId in PartIds) { - //Just re-throw for now, let exception handler deal, but in future may want to deal with this more here - throw; - + if (!await PartDeleteAsync(ItemId)) + return false; } - return true; + + ct.WorkOrderItem.Remove(dbObject); + await ct.SaveChangesAsync(); + + //Log event + await EventLogProcessor.DeleteObjectLogAsync(UserId, AyaType.WorkOrderItem, dbObject.Id, "wo:" + dbObject.WorkOrderId.ToString(), ct); + await Search.ProcessDeletedObjectKeywordsAsync(dbObject.Id, AyaType.WorkOrderItem); + await TagUtil.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); + + //all good do the commit if it's ours + if (parentTransaction == null) + await transaction.CommitAsync(); } + catch + { + //Just re-throw for now, let exception handler deal, but in future may want to deal with this more here + throw; + } + finally + { + if (parentTransaction == null) + await transaction.DisposeAsync(); + } + return true; }