public async Task <IActionResult> OnPostAsync() { await Task.Run(async() => { string username = userManager.GetUserName(User); using (var transaction = context.Database.BeginTransaction()) { try { IEnumerable <Cart> cartitem = cartdb.GetByCartId(username); var transactionOrder = new Transac { Username = username, OrderDate = DateTime.Now }; transactiondb.Add(transactionOrder); await transactiondb.CommitAsync(); foreach (var r in cartitem) { var orderdetail = new OrderDetail { OrderId = transactionOrder.OrderId, GameId = r.GameId, PlatformId = r.PlatformId, Quantity = r.Quantity, }; orderdetaildb.Add(orderdetail); await orderdetaildb.CommitAsync(); //Generate code for (var i = 0; i < orderdetail.Quantity; i++) { var codeidgenerated = Guid.NewGuid().ToString(); var code = new Code { CodeId = codeidgenerated, OrderId = orderdetail.OrderId, GameId = orderdetail.GameId, PlatformId = orderdetail.PlatformId }; codedb.Add(code); await codedb.CommitAsync(); } } cartdb.DeleteItemInCart(username); await cartdb.CommitAsync(); await transaction.CommitAsync(); } catch (Exception e) { Console.WriteLine(e); await transaction.RollbackAsync(); } } }); return(RedirectToPage("../u/Library")); }