public async Task <IActionResult> CreateUpdateCategory(ServiceCategoryViewModel model) { var message = model.Id != null ? Messages.ItemUpdatedSuccessFully : Messages.ItemAddedSuccessFully; var strategy = _dbContext.Database.CreateExecutionStrategy(); await strategy.ExecuteAsync(async() => { using (var transaction = _dbContext.Database.BeginTransaction()) { if (model.Id != null) { var group = await _dbContext.ServiceCategories.FindAsync(model.Id); if (group == null) { throw new AwroNoreException("Service Category Not Found"); } group.Name = model.Name; group.Name_Ar = model.Name_Ar; group.Name_Ku = model.Name_Ku; group.CenterType = model.CenterType; group.UpdatedAt = DateTime.Now; _dbContext.ServiceCategories.Attach(group); _dbContext.Entry(group).State = EntityState.Modified; await _dbContext.SaveChangesAsync(); if (model.ImageUpload != null) { var(newName, thumbName, dirPath, baseUrl) = _uploadService.GenerateServiceCategoryLogoName(group.Id, model.ImageUpload); group.Photo = $"{baseUrl}/{thumbName}"; _dbContext.ServiceCategories.Attach(group); _dbContext.Entry(group).State = EntityState.Modified; await _dbContext.SaveChangesAsync(); await _uploadService.UploadServiceCategoryLogoAsync(model.ImageUpload, dirPath, newName, thumbName); } } else { var group = new ServiceCategory { Name = model.Name, Name_Ku = model.Name_Ku, Name_Ar = model.Name_Ar, CenterType = model.CenterType, CreatedAt = DateTime.Now, }; await _dbContext.ServiceCategories.AddAsync(group); await _dbContext.SaveChangesAsync(); var(newName, thumbName, dirPath, baseUrl) = _uploadService.GenerateServiceCategoryLogoName(group.Id, model.ImageUpload); group.Photo = $"{baseUrl}/{thumbName}"; _dbContext.ServiceCategories.Attach(group); _dbContext.Entry(group).State = EntityState.Modified; await _dbContext.SaveChangesAsync(); await _uploadService.UploadServiceCategoryLogoAsync(model.ImageUpload, dirPath, newName, thumbName); } transaction.Commit(); } }); return(Json(new { success = true, message })); }