Знаете ли вы, как осуществлять транзакции в замке ActiveRecord? - PullRequest
4 голосов
/ 02 сентября 2008

Я решил создать систему для клиента, используя 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();
               }

Но это не работает, я выкидываю исключение только для того, чтобы попытаться откатить транзакцию, но к своему удивлению я вижу, что первые [Сохранить] записи в базу данных. Что происходит?

Я новичок в Касле и NHibernate, во-первых, я увидел, что это очень привлекательно, и я решил продолжить с ним и MySQL (я никогда не работал с этой БД), я попробовал ActiveWriter, и он показался мне очень перспективным, но после Я недолго и напряженно смотрю на эту проблему, и теперь чувствую, что застрял и потерял время. Это должно быть легко, но сейчас я чувствую себя раздраженным, потому что не могу найти достаточно информации, чтобы выполнить эту тренировку, вы можете мне помочь?

Ответы [ 3 ]

5 голосов
/ 02 сентября 2008

Вам нужно обернуть код в область видимости сеанса, например:

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

Подробнее здесь .

3 голосов
/ 02 сентября 2008

Бен понял. Этот документ немного сбивает с толку. Обратитесь к последнему блоку на странице , «Вложенные транзакции».

0 голосов
/ 02 сентября 2008

Я наконец-то исправил, так получилось, что я поступил неправильно, я переопределил метод Save класса Member и сделал sessionScope внутри и внутри него областью транзакции, поэтому, когда включал все это в область транзакции, он сохранялся в база данных, поэтому, когда я выдал исключение, все уже было сохранено, я думаю, что это все.

В общем, спасибо за помощь.

...