嗨,我是MVC新手,仍在尝试了解使用异步的可能问题。
我有下面的代码,你可以看到我已经为所有数据库调用设置了异步(不确定这是否是一个好习惯)。 您可能会注意到这是一个简单的付款流程。我正在使用Customer的属性更新CustomerPayment实体,并且在我添加新事务后,我正在更新客户的balance属性。
使用下面的colde,在数据库调用方面是否存在使用异步的风险?
另外,我可以看到事务的_context.Database.BeginTransactionAsync()方法,使用BeginTransactionAsync和正常的BeginTransaction有什么区别?
是否可以重新编写此代码以正确使用异步?
using (var dbContextTransaction = _context.Database.BeginTransaction())
{
try
{
CustomerPayment cp = vm;
Customer c = await _context.Customer.SingleOrDefaultAsync(m => m.CustomerId == vm.SelectedCustomerID);
decimal? updatedOutstandingAmount = c.CurrentOutStandingBalance - cp.Payment.PaymentAmount;
cp.OutstandingAmount = updatedOutstandingAmount;
c.CurrentOutStandingBalance = updatedOutstandingAmount;
_context.Add(cp);
_context.Update(c);
await _context.SaveChangesAsync();
dbContextTransaction.Commit();
TempData["status"] = "CustomerPaymentAdded";
return RedirectToAction("Payment", "Customer");
}
catch(Exception ex)
{
dbContextTransaction.Rollback();
}
};