これまでデスクトップクライアントアプリケーションでTransactionScopeを使用して、不完全な複数ステップトランザクションをロールバックしました。このアプローチは、Webアプリケーションではうまくいかないようです。複数のHTTPリクエストにまたがる複数ステップデータベーストランザクション
プロセス全体が完了していない場合、複数ページにわたる複数のステップをロールバックする方法を提案できますか? (ブラウザがクラッシュしたり、途中でブラウザを閉じるなど)
確かに、ある種の一時テーブルに書き込んで、最終レコードを単一のトランザクションで実テーブルに転送することはできますが、競合状態のリスク。私はトランザクションを開始し、いくつかのページを提供したい、各ページはトランザクションの一部をテーブルに書き込んだり、コミットしてトランザクションを完了したり、トランザクションが完了していなければロールバックしたりする。セッションは終了します。
私は正しい方法を考えていませんか?提案?
私はMVC 3、EF 4.1、Ninjectを使用しているので、どのように解決策に影響するのか分かりませんが、私はその情報を含めると思っていました。
これは、並行処理を手動で処理する必要があることを意味します。それは私のコード臭のように思える。 –
Webアプリケーションで並行処理を手動で処理することは非常に一般的です。データベーストランザクションはできるだけ短くする必要があります。ほとんどの一般的なシナリオでは秒単位です。あなたがやりたいことは、数分間データベースに集中的にロックすることを意味します=あなたのアプリケーションはひどく悪い動作をします。 –