本質的に、これはこの質問のフォローアップです。アイデア全体をあきらめるべきだと感じ始めていますが、もう一度試してみます。
私が欲しいのは、DB トランザクションにかなり似ています。DBへの変更を追跡し、最終的にそれらをコミットまたはロールバックできるようにする必要があります。オブジェクトを挿入すると、次の (適切な) SELECT クエリでそれを取得する必要があります。削除すると、今後の SELECT クエリで返されなくなります。等。
ただし、問題が 1 つあります。このトランザクションは非常に長時間実行されます。ユーザーがフォームを開いたときに開始され(ここではWindowsフォームについて話している)、コミット/ロールバックはユーザーがフォームを閉じたときに(OK/キャンセルで)開始されます。したがって、数秒から数日かかる可能性があります。この要件により、標準の DB トランザクションは除外されます。これは、トランザクションが触れたテーブル/行がロックされ、他のユーザーがシステムを使用できなくなるためです。また、トランザクションは、実際にコミットされるまで、DB への変更をコミットしないでください。そのため、1 人のユーザーが何らかの変更を行った場合、他のユーザーには [OK] ボタンが押されるまで変更内容が表示されません。これにより、コンピューターがクラッシュしたり、ネットワークから切断されたりした場合のエラーを防ぎます。
ソリューションがモデルに制約を課す場合、私はまったく問題ありません (私は MSSQL 2008 を使用しています)。DB/コードは好きなように設計できます。また、私のトランザクションが触れたオブジェクトの 1 つを誰かが既に変更しているために、コミットが失敗する可能性があるという考えにも問題はありません。
このようなことはありますか?私は NHibernate.Burrow を見ましたが、それが私が望むものかどうかはわかりません。
追加:これはプロジェクトのまさに始まりなので、私は NHibernate に縛られていません。私はそれで始めましたが、私はまだ簡単に変えることができます.