モデルタイプM1を編集するダイアログD1とモデルタイプM2を編集する別のダイアログD2があります。 M2に含まれるものの1つはM1への参照であり、ユーザD2の便宜として、D1を起動するボタンと、D1とD2の両方がトップレベルからアクセス可能である。ActiveRecordでネストされたトランザクションを必要とするネストされたUI
それぞれD1およびD2は、入力時にTransactionScope
(TransactionMode.New
を使用)を作成し、ユーザーがダイアログと対話するときにモデルオブジェクト(M1またはM2)を変更し、ユーザーがOK/Cancelを押したときに適宜コミット/ボタン。
これは、ダイアログボックスが最上位から開かれているときに、分離して正常に機能します。
D1をD2内から開くと、D1のOKをクリックするとすぐにデータベースに保存され、M1の変更がD2に表示されるはずです。 (D2はM1に影響を与えずにM2への変更を保存またはキャンセルできます)
実際には、D1の終了時(D2終了前)はM1への変更がデータベースに保存されているようですが、 D2はM1の変更を見ることはできません。おそらく、D2のセッション/トランザクションは最新のオブジェクトを持っていると考えているので、FindFirst
などが呼ばれてもデータベースを再クエリーしません。強制的に(M2への変更を失うことなく)何らかの方法がありますか?
(D2がD1をD2から呼び出された場合のために閉鎖されたときにもう一つの奇妙な行動がTransactionScope.OnCompleted
へのそのD1 & D2フックの両方ですが、D1でこののみ発生します。)