异步数据库调用安全

时间:2016-11-23 00:10:09

标签: asp.net-mvc entity-framework

嗨,我是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();
                }

            };                

0 个答案:

没有答案