This commit is contained in:
2020-05-09 20:01:59 +00:00
parent 039477a93a
commit bbc913c598

View File

@@ -379,37 +379,30 @@ namespace AyaNova.Biz
// //
internal async Task<bool> ItemDeleteAsync(long id) internal async Task<bool> ItemDeleteAsync(long id)
{ {
WorkOrderItem dbObject = await ct.WorkOrderItem WorkOrderItem dbObject = await ct.WorkOrderItem.SingleOrDefaultAsync(m => m.Id == id);
.SingleOrDefaultAsync(m => m.Id == id);
ItemValidateCanDelete(dbObject); ItemValidateCanDelete(dbObject);
if (HasErrors) if (HasErrors)
return false; return false;
//Traverse and delete tree //collect the child id's to delete
//maybe need to get tree list of id's then work with that var LaborIds = await ct.WorkOrderItemLabor.Where(m => m.WorkOrderItemId == id).Select(m => m.Id).ToListAsync();
//a static function to get all id's from object and below? var PartIds = await ct.WorkOrderItemPart.Where(m => m.WorkOrderItemId == id).Select(m => m.Id).ToListAsync();
//https://docs.microsoft.com/en-us/ef/core/saving/transactions
WorkOrderItem dbObject = await ct.WorkOrderItem
.Include(wi => wi.Labors) using (var transaction = await ct.Database.BeginTransactionAsync())
.Include(wi => wi.Parts)
.SingleOrDefaultAsync(m => m.Id == id);
var LaborIds = dbObject.Labors.Select(m => m.Id).ToList();
var PartIds = dbObject.Parts.Select(m => m.Id).ToList();
using (var transaction = ct.Database.BeginTransaction())
{ {
try try
{ {
//Delete children //Delete children
foreach(long l in LaborIds){ foreach (long l in LaborIds)
{
if (!await LaborDeleteAsync(id)) return false; if (!await LaborDeleteAsync(id)) return false;
} }
foreach(long l in PartIds){ foreach (long l in PartIds)
{
if (!await LaborDeleteAsync(id)) return false; if (!await LaborDeleteAsync(id)) return false;
} }
ct.WorkOrderItem.Remove(dbObject); ct.WorkOrderItem.Remove(dbObject);
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
@@ -419,16 +412,17 @@ namespace AyaNova.Biz
await TagUtil.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); await TagUtil.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags);
//all good do the commit //all good do the commit
transaction.Commit(); await transaction.CommitAsync();
} }
catch catch
{ {
//Just re-throw for now, but in future may want to deal with this more here //Just re-throw for now, let exception handler deal, but in future may want to deal with this more here
throw; throw;
} }
return true; return true;
} }
}
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////