0

私はワークフロー管理ツールを使用するチームで働いています。ユーザーがフロー中に加えられた変更を過去の特定の時点にロールバックできるようにする必要があるという課題が提示されました。確かに通行料はそれを処理できますが、これらの活動中に行われた可能性のある追加のデータベース呼び出しは手動でロールバックする必要があります.

課題は、複数の並列パスがあり、外部データベース呼び出しの順列が異なることです。これらの DB 呼び出しを追跡してロールバックするフレームワークまたは方法はありますか?

ありがとう、ジャスティン

4

3 に答える 3

2

うーん、そうは思いません。

たとえば、Entity Frameworkでは機能がTRANSACTIONSありますが、これはこの開始の最初からこれだけで変更されます( - SQLステートメントROLLBACKROLLBACKTRANSACTIONSTART TRANSACTION

次に、複数の並列パスで a を開始し、または変更TRANSACTIONを決定する必要があります。しかし、他の並列インスタンスは、まだ変更されていない他の人に加えられた変更を認識しません。COMMITROLLBACKCOMMITTRANSACTIONSCOMMITED

アプリケーション/データベースでリファクタリングを行う必要があると思いますが、これはトピック外のヒントにすぎません。

于 2010-06-08T21:42:20.497 に答える
0

これらの変更は、すでに中間状態でデータベースにコミットされていますか? それが問題になります。他のユーザーがコミットされたデータに基づいてアクションを開始した可能性があるため。

コミット前に n レベルの取り消しをサポートするシステムを見たことがありますが (CSLA はこれを行います)、これはメモリ内のオブジェクト モデル レベルです。

ユーザーのアクションを待って、データベース トランザクションを無期限に開いたままにすることはありません。

于 2010-06-09T00:28:51.820 に答える
0

ロールバックする必要がありますか、それともデータを特定の状態にする必要がありますか? 後者の場合は、レコードをワークフロー ステップ X の前の値に戻すかどうかの問題です。

主要な間隔でオブジェクトのスナップショットを取得し、データベース内の「現在の」データに加えてそのデータを永続化するMomento パターンと呼ばれるデザイン パターンがあります。このタイプのトランザクションは、オブジェクトのシリアル化として保存および記録される可能性があるため、現在所有しているすべてのテーブルに対して履歴テーブルを作成する必要があります。

秘訣は、Memento トランザクションからオブジェクトを復元し、データを標準テーブルに保存することです。

于 2010-06-12T00:14:29.160 に答える