This should work fine:

1) You load parent and all associated childs in non-flushing sessionscope.
2) More childs are added. No one calls save or something, so new
childs are still transient.
3) On Save-button pressed, call save on parent and cascade changes to child.
4) On Cancel-button presses, discard the sessionscope and reload
object in a new one.

If you are using IDENTITY PKs, don't call save on childs, but rely on
cascading instead! Saving them adds them to the DB instantly,
regardless of flushing behaviour!

-Markus

2009/1/13 Greg Burri <greg.bu...@gmail.com>:
>
> Hi,
> I use nHibernate with ActiveRecord in a such manner :
>    * I have a global session of type 'TransactionScope'
>    * When the user want to save his work his click on "file -> save"
> of the application menu. This action will execute a such code :
>         globalSession.VoteCommit();
>         globalSession.Dispose();
>         globalSession = new TransactionScope();
>
>
> Basically I have a dialog to edit an object 'p' of class 'Parent'
> which owns some objects 'c' of class 'Child'. Both of theses classes
> deriving from 'ActiveRecordLinqBase'.
>
> When the user choose 'Cancel' from the dialog after editing some
> values of 'a' and adding or removing some B objects I want to reverse
> theses changes (that is remove 'Child' objects that was added and add
> removed 'Child' objects).
>
> (Case 1) If I use the method "p.Refresh()" there will be an exception
> like "No row with the given identifier exists[Child#0]" in the case
> the user added some 'c'.
> (Case 2) If I use a transaction with "p.SaveAndFlush()" +
> "t.VoteRollBack()" + "t.Dispose()" then this error will be throwed :
> "Illegal attempt to associate a collection with two open
> sessions" (for the same case above, where a 'b' is added).
>
> Is my approach is good ? Or it's a misusing of nHibernate and
> ActiveRecord ?
>
> I have uploaded a little sample project here :
> http://www.gburri.org/bordel/ActiveRecordLifecycle.zip. If you want to
> run it you need PostgreSQL or change the 'app.config'.
> This sample will create a parent and some children attached to it at
> launch.
> You can edit the 'Parent' object and change its state with the button
> "Change state" and try to undo the modifications with "Cancel".
>
> Here are some additional information about my configuration :
>
> nHibernate version: 2.1.0.1001
> Active record version: 1.0.3.0
> Database: PostgreSQL 8.3
>
> Thanks in advance.
>
> /Greg
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Castle Project Users" group.
To post to this group, send email to castle-project-users@googlegroups.com
To unsubscribe from this group, send email to 
castle-project-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/castle-project-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to