Я разрабатываю финансовое приложение с ASP.NET MVC и Entity Framework (версия 5).
В моем приложении пользователи могут одобрить или отклонить транзакцию. Если пользователь одобрит, деньги будут переведены, и будет отправлено электронное письмо с уведомлением об одобрении, в противном случае будет отправлено электронное письмо с уведомлением об отклонении.
Меня беспокоит, если два пользователя приходят одновременно, чтобы подтвердить одну и ту же транзакцию. Пользователь получит статус транзакции «WaitForApprove» и сделает двойную передачу (в случае, если оба пользователя подтвердят).
Как я могу справиться с этой ситуацией, какое решение лучше всего (имеет смысл и потребляет мало ресурсов).
Я провел небольшое исследование и обнаружил, что Mutex может с этим справиться. Но я не уверен, что это лучшее решение.
Вот как выглядит мой исходный код (мьютекс не применяется).
public void TransactionApproval(int sysTransferInfoID, string username, string command)
{
// Get the transaction.
var info = _transInfoRepo.GetSingle(i => i.SYS_TRANSFER_INFO_ID == sysTransferInfoID);
if (info.SYS_TRANSFER_STATE_ID != (int)eTransferState.WaitForApprove) // Check status.
{
if (command == "Approve")
{
// Call another service to make transfer here.
// Sent approve fund transfer notification email to other users.
info.SYS_TRANSFER_STATE_ID = (int)eTranferState.Approved; // Change status.
info.APPROVE_BY = username;
}
else if (command == "Reject")
{
// Sent reject fund transfer notification email to other users.
info.SYS_TRANSFER_STATE_ID = (int)eTranferState.Rejected; // Change status.
info.APPROVE_BY = username;
}
_context.SaveChanges();
}
else
{
throw new Exception("Cannot approve transaction.");
}
}
ROWVERSION
? - person DavidG   schedule 10.10.2014