4

Castle ActiveRecordを使用してクライアント用のシステムを作成することにしました。たとえば、トランザクションが機能しないことが判明するまで、すべてがうまくいきました。

               TransactionScope t = new TransactionScope();

               try
               {
                   member.Save();

                   //This is just to see transaction working
                   throw new Exception("Exception");  

                   foreach (qfh.Beneficiary b1 in l)
                   {
                       b1.Create();
                   }


               }
               catch (Exception ex)
               {

                   t.VoteRollBack();
                   MessageBox.Show(ex.Message);
               }
               finally
               {
                   t.Dispose();
               }

トランザクションのロールバックを試みるためだけに例外をスローしましたが、驚いたことに、最初の [Save] レコードがデータベースに記録されていることがわかりました。何が起こっている?

Castle と NHibernate は初めてです。まず、非常に魅力的であることがわかり、MySQL (この DB を使用したことはありません) を使用することにしました。週にこの問題が発生し、行き詰まって時間を無駄にしたような気がします。簡単なはずなのに、このワークアウトを行うのに十分な情報が見つからないので、今はイライラしています。助けてもらえますか?

4

3 に答える 3

5

次のように、コードをセッション スコープでラップする必要があります。

using(new SessionScope())
{
   a.Save();
   b.Save();
   c.Save();
}

詳細はこちらをご覧ください

于 2008-09-02T02:52:51.037 に答える
3

ベンはわかった。そのドキュメントは少し混乱しています。ページの最後のブロック「ネストされたトランザクション」を参照してください。

于 2008-09-02T02:49:15.133 に答える
0

私は最終的に修正しました、それは私が間違っていたことでした.MemberクラスのSaveメソッドをオーバーライドし、sessionScopeをその内部と内部でトランザクションスコープにしました。例外をスローしたとき、すべてがすでに保存されていたので、それだけだと思います。

全体として、助けてくれてありがとう。

于 2008-09-02T03:01:59.657 に答える