いくつかのエンティティ フレームワーク モデルのいくつかのフィールドのアトミック操作チェック値を実行し、その値が 0 の場合はそれを増やす必要があります。
私はトランザクションについて考えました。
bool controlPassed = false;
using (TransactionScope scope = new TransactionScope())
{
var model = ...ModelEntities.first_or_default(...)
if (model.field == 0){
++model.field;
...saveChanges();
controlPassed = true;
}
scope.Complete();
}
if (controlPassed)
{
...
using (TransactionScope scope = new TransactionScope())
{
--model.field;
...saveChanges();
scope.Complete();
}
}
もちろん、try catch などのすべて。
私の質問は次のとおりです。
チェックするのは本当に難しいです。マルチスレッドアプリケーションがあります。
2 つ以上のスレッドが制御を渡す可能性はありfield == 0
ますか (確認して増やしてください)。
データベース (データベース、テーブル、行、フィールド) でブロックされるのは誰ですか?
2 つ以上のスレッドをcontrolPassed
同時にセクションに入れることはできません。