Достижение изоляции для определенных строк в базе данных C # - PullRequest
0 голосов
/ 03 мая 2019

У меня есть приложение, которое выдает письма пользователям в последовательном порядке. Это структура базы данных

-------------------
UserID  LastIssued
-------------------
User1   2
User2   3
User3   0
User4   3
--------------------

Пользователи с правами администратора могут выдавать буквы (увеличивать число) пользователю. Есть несколько администраторов, которые могут войти в систему параллельно.

Это функция, которая используется для выдачи букв

private void issueNewLetterToUser(String userid)
{
    int lastIssued;
    lastIssued = getLastIssuedForUserID(userid);
    //CHECKPPOINT1
    lastIssued++;
    updateLastIssuedForUserID(userid);
}

Пока выполнение находится в контрольной точке 1 в коде, предположим, что другой администратор вызывает ту же функцию для того же пользователя, следующее письмо будет выдано двумя администраторами. Я хочу предотвратить это. Кроме того, если вызов функции для какого-либо другого пользователя, выполнение должно быть разрешено, поскольку строки базы данных независимы.

Как мне этого добиться? (Этот вопрос относится к синтаксису C #, но все же применим ко всем языкам)

1 Ответ

0 голосов
/ 03 мая 2019

Это отличный сценарий для шаблона транзакции.

Вот хорошее прочтение об этом: https://blog.matthewskelton.net/2005/08/22/better-transactions-with-delegates-in-csharp/

В качестве возможного решения может потребоваться обновление данных внутри транзакции, к которой одновременно может обращаться только один администратор.

...